| 引子 | ||
| 前阵子因为工作的需要,翻阅了《Visual C++ 6宝典》一书。虽然自己接触VC也有些年头了,可却发现里面也有不少内容是我鲜有了解的,以下是我摘录并整理的部分内容,希望会对经常使用VC却有着和我一样情况的朋友有所帮助,本文取名“补遗”也正是出于此意。当然,这里所选的条目,或许稍有偏向,因为毕竟是从自己的角度出发,摘录了自认为容易忽略的内容。如果,你需要了解此处未有提及的其他内容,请查阅相关书籍。 | ||
| 调试应用程序前所要做的必要设置 | ||
| Project Settings->C/C++选项卡->General Category
| ||
| Project Settings->C/C++选项卡->Code Generation Category
| ||
| Project Settings->Link选项卡->General Category
| ||
| 如果调试DLL,则需要:Project Settings->Debug选项卡->General Category
| ||
| Variables窗口 | ||
| Variables窗口包含三个选项卡。Auto选项卡显示运行程序当前行以及上一行中所使用的变量;Locals选项卡显示在当前执行的函数内具有局部定义的所有变量(包括局部变量和传入函数的参数);this选项卡显示this指针当前所指向的对象内部的成员变量 | ||
| 你可以通过Variable窗口修改简单类型变量的当前值(比如:int、double),只要在窗口中双击该值就可以修改了。 | ||
| Watch窗口 | ||
| 可以在Watch窗口中手工将表达式输入到Name域中,或者拖拽表达式,或者从剪贴板粘贴。Watch窗口也可以修改简单类型的变量的值。 | ||
| Memory窗口 | ||
| 可以查开所有调试进程的地址空间中的内存内容。可以按字节格式、字格式和双字格式显示内存内容。为显示具体位置处的存储内容,要在Memory窗口的Address栏内键入表达式。Memory窗口可能显示指定地值之前的内存内容,不过它会将光标定位在表达式对应的地址处。 | ||
| Disassembly窗口 | ||
| Set Next Statement功能可以更改处理器的指令指针,以为处理器选择需要执行的下一条指令。但是,如果你设置的语句在另一个函数中或者你不能正确维护堆栈,则后果是不可预测的,通常正在调试的程序会崩溃。 | ||
| 调试多线程 | ||
| 调试多线程应用程序时,可以通过Debug菜单(调试运行时才可见)下的Threads功能,打开Threads对话框,从而将焦点设置给程序内的一个具体线程。还可以挂起、恢复某个线程 | ||
| 调试异常 | ||
| 通过Debug菜单(调试运行时才可见)下的Exceptions功能,打开Exceptions对话框,指定调试运行时,程序对异常的响应情况(包括:Stop always和Stop if not handled两种)。 | ||
| 简单调试技巧 | ||
| | ||
| 如果调试程序窗口的出现干扰了应用程序的执行,或者错误出现在release版程序中,则可以使用AfxMessageBox输出你所感兴趣的信息。这类似于早先用printf输出调试信息的方法。 | ||
| | ||
| MFC提供了宏TRACE、TRACE0、TRACE1、TRACE2、TRACE3,用以生成调时输出。它们将调试信息输出到afxDump对象,该变量是MFC的CDumpContext类的一个实例,它将信息发送到Output窗口。尽量使用TRACE0~TRACE3,因为它们需要的存储空间小于TRACE。TRACE0输出一个字符串,TRACE1输出字符串并可附带一个变量,TRACE2可以附带两个变量,TRACE3可以附带三个。在创建Unicode应用程序时,TRACE必须使用_T宏格式化字符串,而TRACEn不需要。release版应用程序将忽略所有的TRACE和TRACEn宏。 | ||
| | ||
| 除了ASSERT外,ASSERT_VALID宏可以验证一个指向CObject派生类对象的指针的有效性。release版应用程序将忽略所有的ASSERT和ASSERT_VALID宏。 | ||
| | ||
| CObject类中包含Dump()成员函数,它将内容通过afxDump对象输出到Output窗口。你可以在派生类中重载它。 | ||
| | ||
| 可以使用CMemeoryState检测内存泄漏。方法: | ||
| 如果不需要完全dump在两次调用Checkpoint之间被分配的所有对象,则: | ||
| 无法使用CMemoryState对malloc/free,GlobalAlloc/GlobalFree,LocalAlloc/LocalFree进行检测。 | ||
| | ||
| MFC Tracer(文件名:tracer.exe),可以启用或禁用部分或全部MFC跟踪调试信息(TRACE和TRACEn宏)。 | ||
| 远程调试 | ||
| 远程调试允许你调试运行在与你机器相连的其他机器上的程序。远程机器必须运行Visual C++ Debug Monitor(Msvcmon.exe,和MSDEV.exe在同一个目录下),为了运行Msvcmon.exe,远程机器上必须有: Msvcrt.dll、Tln0t.dll、Dm.dll、Msvcp60.dll、Msdis100.dll 。步骤:
| ||
| 远程调试的主要优点是应用程序运行在一个不会因为出现调试程序而受影响的机器上,适合于调试涉及显示、键盘、音频驱动等程序。同时,也适合于调试debug版能正常运行而release版不能正常运行的程序。 | ||
| (待续) |
相关推荐
VC补遗之Debug篇 (转)
作者: 晨光(Morning)
[转载]VC补遗之Profile篇
作者: 晨光(Morning) 关键字: VC Profile 性能优化 来源: 原作 【声明】如需复制、传播,请附上本声明,谢谢。原文出处:http://morningspace.51.net/,moyingzz@etang.com Profile的作用 帮助你分析并发现程序运行的瓶颈,找到耗时所在,同时也能帮助你发现不会被执行的...
VC补遗之Profile篇
导读: VC补遗之Profile篇 作者: 晨光(Morning) 关键字: VC Profile 性能优化 来源: 原作 【声明】如需复制、传播,请附上本声明,谢谢。原文出处:http://morningspace.51.net/,moyingzz@etang.com (续篇) Profile的作用 帮助你分析并
VC Debug 技巧
VC Debug 技巧前阵子因为工作的需要,翻阅了《Visual C++ 6宝典》一书。虽然自己接触VC也有些年头了,可却发现里面也有不少内容是我鲜有了解的,以下是我摘录并整理的部分内容,希望会对经常使用VC却有着和我一样情况的朋友有所帮助,本文取名“补遗”也正是出于此意。当然,这里所选的条目,或许稍有偏向,因为毕竟是从自己的角度出发,摘录了自认为容易忽略的内容。如果,你需要了解此处未有提及的其他内容,请查阅相关书籍。<br /><br />调试应用程序前所要做的必要设置<br /><br />Projec
VC补遗之PROFILE篇 (转)
Profile的作用 帮助你分析并发现程序运行的瓶颈,找到耗时所在,同时也能帮助你发现不会被执行的代码。从而最终实现程序的优化。 Profile的组成 Profile包括3个命令行工具:PREP,PROFILE,PLIST。可以以命令行方式运行Profile,其过程是:PREP读取应用程序的可执行文件并生成一个.PBI文件
补遗篇之volatile
C中volatile关键字在程序操作变量时,强制读写变量所在内存,以阻止编译器对某些特殊变量的错误优化。反过来,只有靠程序员用volatile过滤一些特殊情况后,编译器才能大胆优化。volatile作用可总结为:阻止三种情形下的两种编译器优化。 两种编译器优化 a. 数据流分析优化:编译器分析程序中变量在哪里赋值、哪里使用、哪里失效,根据分析结果消除多余的变量读取和赋值步骤,如:
引用 VC Debug 技巧(转)
引用 charles_yang 的 VC Debug 技巧(转)前阵子因为工作的需要,翻阅了《Visual C++ 6宝典》一书。虽然自己接触VC也有些年头了,可却发现里面也有不少内容是我鲜有了解的,以下是我摘录并整理的部分内容,希望会对经常使用VC却有着和我一样情况的朋友有所帮助,本文取名“补遗”也正是出于此意。当然,这里所选的条目,或许稍有偏向,因为毕竟是从自己的角度出发,摘录了自认为容易忽
VC调试
<br />【一】参考文档<br /> 1.《VC调试_解密版.pdf》<br /> <br /> <br />【二】知识摘录<br /> <br />1.问:VC调试选项卡中的“工作目录”:<br /> 答:<br />2.Profiler能够识别应用程序的瓶颈,即找到降低程序执行速度的代码和有关模块,为此需要在"工程/设置/Link"下勾选Profiling。<br />VC补遗之Profile篇<br /><br />Profile的作用<br /> 帮
关于字符串的用法和转换补遗
1:使用CString,要包含文件afx.h,比如在Win32 Console Application中Alt+F7选择Use MFC in a Static Liberary,然后再添加#include就可以使用CString了。2:WCHAR ch = L’中’;与CHAR ch = ’中’;的区别是第一种使用UNICODE编码,第二种方式一般不经常用到,比如: WCH
VC使用的文章(转)
VC补遗之Profile篇 作者: 晨光(Morning) 关键字: VC Profile 性能优化 来源: 原作 【声明】如需复制、传播,请附上本声明,谢谢。原文出处:http://morningspace.51.net/,moyingzz@etang.com (续篇) Profile的作用 帮助你分析并发现程序运行的瓶颈,找
使用AfxMessageBox
1065




被折叠的 条评论
为什么被折叠?



