- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VC程序调试 调试工具 查看工具 高级调试技术 使用查看工具 程序停下来后,可以利用工具查看变量、堆栈、内存等 1、弹出式信息: 方法:鼠标停在变量,或者选中的表达式上即可弹出 2、变量窗口: 菜单view/debug windows/variables,或右击菜单右边空格处选择 有auto、locals、this三个选项卡(3类型) 高级调试技术 1、TRACE宏 例子:TRACE( Integer = %d, String = %s\n, i, sz ); 支持可变参数(类似printf()函数),一次最多512 个字符 ,输出的内容会出现在最下方的output窗口 2、ASSERT宏 例子:ASSERT( pcage!= NULL ) ,参数是逻辑表达式,若为真不起作用,为假,弹出对话框警告,作abort、igore、retry选择其一。 在debug版本起作用,release版本不起作用 * * VC程序调试 调试工具 查看工具 高级调试技术 调试工具-工程的调试属性 1、工程的调试属性 (1)Debug版本:包含调试信息,不进行代码优化,程序调试时用,文件大,放在debug目录下 (2)Release版本:开发完成后,程序发行时,需编译成Release版本,不包含调试信息,对代码进行优化,文件小,放在release目录下 2、如何设置: 菜单project/settings…/ 注意:工程生成时缺省设置是debug 调试工具-断点 设置断点使程序停下来,断点类型: 1、位置断点,最常用 3种方法:(1)工具条;(2)点击右键,选择insert/remove breakpoint菜单;(3)Edit 菜单/breakpoints…/… 前2个方法最常用 2、逻辑断点:设置条件 方法:Edit 菜单/breakpoints…/… 3、windows消息有关的断点 方法:Edit 菜单/breakpoints…/… 程序运行控制 1、运行到断点处: 菜单Build/start debug/go 或者工具条 2、运行到光标处:run to cursor 菜单Build/start debug/run to cursor 或工具条 3、单步走:菜单Build/start debug或者工具条上有: Step out Step into Step over 注意:如果以上的工具条上没有,则右键点击菜单右边空白处,选择debug即可 VC程序调试 调试工具 查看工具 高级调试技术 使用查看工具 3、观察窗口(watch):查看添加的变量和表达式,可以改变变量的值 菜单view/debug windows/watch,或右击菜单右边空格处选择 4、内存窗口:输入地址,查看内存 菜单view/debug windows/memory,或右击菜单右边空格处选择 5、寄存器窗口:查看寄存器 菜单view/debug windows/registers,或右击菜单右边空格处选择 使用查看工具 6、快速查看对话框(quick watch):查看添加的变量和表达式,可以改变变量的值,可以把查看的变量或表达式加入到watch窗口 方法:在变量或选中的表达式点击右键选择quick watch 7、函数调用堆栈:call stack 菜单view/debug windows/call stack,或右击菜单右边空格处选择call stack VC程序调试 调试工具 查看工具 高级调试技术 高级调试技术 3、 ASSERT_VALID宏,声明对象内部合法性 例子:ASSERT_VALID(pMyObject); 参数是对象指针,调用ASSERT_VALID宏会调用对象Cobject::AssertValid()成员函数,所以创建Cobject继承下来的对象时,可重载AssertValid(),做自己特定的合法性检查 高级调试技术 4、对象dump函数 Dump是Cobject成员函数,按照指定格式输出对象成员变量,帮助诊断对象 使用方法: (1)在要dump的类中定义dump函数,并在头文件中声明,例如: #ifdef _DEBUG void CMyDlg::Dump( CDumpContext dc ) const { CObject::Dump( dc );//输出基类dump内容 //再输出CMyDlg类要dump内容 dc input = m_Input \n ; dc show = m_Show \n ; } #endif
文档评论(0)