C++中使用断点写调试方法
2014-08-19 11:29
501 查看
C/C++ code:
f9 —— 设置/取消断点
f10 —— 单步执行
f11 —— 比f10的步幅小
f10在函数的调用时,直接跳过,在f11下,会进入函数体!
f5 —— 执行到下一个断点!
了解调试,首先要知道"断点"这个概念。断点就是程序运行中可能会中断的地方,方便开发者在程序运行的过程中查看
程序当前的运行状态,比如变量的值,函数的返回值等等。究竟怎么使用断点呢?
1.F9在当前光标所在的行下断点,如果当前行已经有断点,则取消断点。
F5调试状态运行程序,程序执行到有断点的地方会停下来。
F10单步执行程序。
CTRL+F10运行到光标所在行。
F11和F10的区别是,如果当前执行语句是函数调用,则会进入函数里面。
SHIFT+F11跳出当前所在函数。
特别说明:
a.有的地方不能下断点。比如空行,基本类型定义语句(不初始化),等等非执行语句。比如
int i; // 此行不能下断点
int j=0;// 这里可以下
CString str;// 这里可以下
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编译,然后直接运行程序。当程序执行到上述代码的时候,就会出现一个框,告诉你说一大堆信息,说程序错
了,下面有"调试"、"终止"、"忽略",不用理,点调试就可以进入跟踪了。
f9 —— 设置/取消断点
f10 —— 单步执行
f11 —— 比f10的步幅小
f10在函数的调用时,直接跳过,在f11下,会进入函数体!
f5 —— 执行到下一个断点!
了解调试,首先要知道"断点"这个概念。断点就是程序运行中可能会中断的地方,方便开发者在程序运行的过程中查看
程序当前的运行状态,比如变量的值,函数的返回值等等。究竟怎么使用断点呢?
1.F9在当前光标所在的行下断点,如果当前行已经有断点,则取消断点。
F5调试状态运行程序,程序执行到有断点的地方会停下来。
F10单步执行程序。
CTRL+F10运行到光标所在行。
F11和F10的区别是,如果当前执行语句是函数调用,则会进入函数里面。
SHIFT+F11跳出当前所在函数。
特别说明:
a.有的地方不能下断点。比如空行,基本类型定义语句(不初始化),等等非执行语句。比如
int i; // 此行不能下断点
int j=0;// 这里可以下
CString str;// 这里可以下
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编译,然后直接运行程序。当程序执行到上述代码的时候,就会出现一个框,告诉你说一大堆信息,说程序错
了,下面有"调试"、"终止"、"忽略",不用理,点调试就可以进入跟踪了。
相关文章推荐
- 【转】C++中使用断点写调试方法
- C++中使用断点写调试方法
- 使用Firebug对js进行断点调试的图文方法
- VS2015 C#调试C++ dll时提示:“当前不会命中断点,因为还没有为该文档加载任何符号”解决方法From Eric Qu
- C++ 调试宏 __LINE__ __FILE__ & UNICODE使用方法
- CodeBlock 基本使用 与 设置断点和单步调试方法 与生活标准普尔图
- 使用Firebug对js进行断点调试的图文方法
- Angular2使用vscode断点调试ts文件的方法
- C++断点调试方法
- 使用断点 一写调试方法(抄)
- 使用Firebug对js进行断点调试的图文方法
- 使用maven进行测试设置断点调试的方法
- 在游戏全屏模式下,使用远程调试的设置方法
- 使用Visual Studio.net调试javascript最方便的方法
- 查找错误的几个调试方法&一些C/C++的文章&一些零碎知识
- 如何在VC的release编译中使用断点调试(摘抄)
- c++中函数指针的使用方法
- C++指针使用方法解惑
- ASCII表及C++中使用方法
- 一个方便调试所使用的方法