vc++ 调试技巧

跟踪

利用调试运行启动调试环境
利用调试版错误启动调试环境
附加到已有的进程。
多项目-设置为启动项目。

断点

F9: 启用/关闭断点
Ctrl+F9: 停止断点
Ctrl+Shift+F9: 删除全部断点
F10: 逐过程 
Ctrl+F10: 运行到光标处 
F11: 逐语句

F5: 启动调试
Ctrl+F5: 开始执行(不调试)
Shift+F5: 停止调试
Ctrl+Shift+F5: 重启调试

条件断点

Step over, step Into , Step Out ,Run to Cursor。      

Step over 的功能是运行当前箭头指向的代码(只运行一条代码)。      

Step Into的功能是如果当前箭头所指的代码是一个函数的调用,则用Step Into 进入该函数进行单步执行。      

Step Out的功能是如当前箭头所指向的代码是在某一函数内,用它使程序运行至函数返回处。 

Run to Cursor的功能是使程序运行至光标所指的代码处。

查看变量

局部变量:显示变量的值
监视窗口:实时显示变量的值。
模块窗口,是否正确加载的dll等
线程窗口,可以通过冻结一个线程,进行调试。
调用堆栈:确定最后出错的位置。
内存窗口:根据地址,显示16进制数据,地位在前高位在后,  可以设置字节整数。

查看void*的数据:
char pString = "this is string";
void * pMem = (void*)pString;

在监视中:
pString,10     // 设置长度
pMem,s         //  string 类型显示,如果是unicode 加 su
@err,hr         // 最后一个错误码值, 看HRESULT型的错误信息

使用消息框
::MessageBox(AfxGetApp()->GetMainWnd()->m_hWnd, 
            _T("提示信息"), _T("提示信息"), MB_OK|MB_ICONWARNING);

调试输出


TCRACE();
OutputDebugString();
 
使用断言 ASSERT(不满足中断)

在开发过程中我们可以假设只要程序运行正确,某一条件肯定成立。如不成立 ,那么我们可以断言程序肯定出错。在这种情况下我们可以利用ASSERT来设定断言。ASSERT宏的参数是一个逻辑表达式,在程序运行过程中,若该逻辑表达式为真,则不会发生任何动作,若此表达式为假,系统将弹出一个对话框警告你,并停止程序的执行。同时要求你作出选择:Abort,Ignore,Retry。若你选择Abort,系统将停止程序的执行;若你选择Ignore 系统将忽略该错误,并继续执行程序;若你选择Retry ,系统将重新计算该表达式,并激活调试器。同TRACE宏一样,ASSERT宏只DEBUG版本中起作用,在RELEASE版本中ASSERT宏将被忽略。

 

对象倾倒

对象的DUMP函数的利用
Dump 函数用来按指定的格式输出一个对象的成员变量,来帮助你诊断一个对象的内部情况。与AssertValid成员函数一样,Dump也是Cobject 类的成员函数。Dump函数的参数是一个CdumpContext对象,你可以象利用流一样往向这个对象中输入数据。当你创建一个Cobject继承而来的 新类时,你可以按如下步骤重载你自己的Dump函数:
(1) 调用基类的Dump函数,以输出基类的内容;
(2) 向Cdumpcontest对象输出该类的数据.
例如,典型的Dump函数定义如下:
#ifdef _DEBUG
void CPerson::Dump( CDumpContext& dc ) const
{
// call base class function first
CObject::Dump( dc );
// now do the stuff for our specific class
dc << "last name: " << m_lastName << "\n"
<< "first name: " << m_firstName << "\n";
}
#endif

你可能已经注意到整个函数的定义都包含在#ifdef _DEBUG 和#endif中,这使得Dump成员函数只在DEBUG版本中发生作用,而对RELEASE版本不发生作用。


检测内存泄露


编辑并继续调试


调试Windows NT服务

 

更改数值

编译调试,不用重新开始

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值