【转】C++中使用断点写调试方法

f9 --- 设置/取消断点
f10 ---
单步执行

f11 ---
f10的步幅小,f10在函数的调用时,直接跳过,在f11下,会进入函数体!

f5 ---
执行到下一个断点!




了解调试,首先要知道"断点"这个概念.断点就是程序运行中可能会中断的地方,方便开发者在程序运行的过程中查看程序当前的运行状态,比如变量的值,函数的返回值等等.究竟怎么使用断点呢
?



1.F9
在当前光标所在的行下断点,如果当前行已经有断点,则取消断点
.



F5
调试状态运行程序,程序执行到有断点的地方会停下来
.



F10
单步执行程序
.



CTRL+F10
运行到光标所在行
.



F11
F10的区别是,如果当前执行语句是函数调用,则会进入函数里面
.



SHIFT+F11
跳出当前所在函数
.



特别说明
:

a.
有的地方不能下断点.比如空行,基本类型定义语句(不初始化),等等非执行语句.比如




int i; //
此行不能下断点


int j=0;//
这里可以下


CStringstr;//
这里可以下


intk = Max(i,j);//
这里可以下



b.
不是所有断点都会().比如下断点的语句在程序里面没有被执行
.



c.
此外,ALT+F9还可以下条件断点,不过这个不常用,有兴趣的可以自己研究
:)



2.
如何调试Release版的程序
?



有些程序在debug下运行的很好,但在release下却总是失败,默认情况下release是不能调试的. 怎么解决呢
?



其实"debug""release"都只是一个代号而已,各自对应一组不同的编译选项
.



release的默认设置下,ALT+F7 ,调出工程设置对话框,切换到link选项卡,勾选"Generate debug info",然后再切换到C/C++选项卡,"Optimizations"里面选"Disable(Debug)",在下面的"Debug info"里面选"Program Database for Edit and Continue".然后点OK保存设置,重新编译程序,下断点即可
.



3.
上面两点已经能应付很多种情况了,但是有时候即使在debug下也不能下断点,我以前也曾经遇到过这种问题,一个调了层的dll,就是不能下断点.其实还除了上面的方法,还有一种最底层的实现技术:使用汇编
.



细心的人可能会发现,有时候在调试状态下当程序出现异常的时候,光标会指向汇编代码,而这个代码就是int 3,这其实是一个中断
.



在你的代码的任意地方加上


__asm

{

int 3

};



debug编译,然后直接运行程序.当程序执行到上述代码的时候,就会出现一个框,告诉你说一大堆信息,说程序错了,下面有"调试""终止""忽略",不用理,点调试就可以进入跟踪了

posted @ 2011-07-27 19:10  csqlwy  阅读(1321)  评论(1编辑  收藏  举报