Q1 : 很多时候 发现 用VS 编译器写出的程序 有时候不能调试,断点的那个红点是 空心的
Q2 : 很多时候 Debug 和 Release 版本 运行结果不一样
Q3 : 很多时候 程序偶尔 运行结果会出错,但是 源头很难查
下面我来讲一下 Windows 下C++程序 附加进程调试方法
什么是 附加进程呢?
就是 编译器 把 运行在 任务管理器里面的 程序(前提是有源码) 加载到 编译器里面,根据运行信息一步一步记录并调试。
为什么使用 附加进程呢?
面对 Q2 Q3 问题 ,附件进程能几乎解决掉 50%的错误。
接下来 代码说话
一 。 VS2010 新建工程 (VS 版本比较低的或者不支持的, 我前面有文章,专门是 提供了各种VS版本下载地址 和安装说明 可以去看)
File -> New -> Project ->Win32 Project -> Windows Application
二。 F5运行 确认程序可以成功编译 关掉
三。运行程序 这次要按 Ctrl+F5 运行(你们可以理解为 非调试模式下运行) ---> 按 Ctrl + Alt + p 会出现一个对话
选择 你编译的那个程序进程, 双击 或者点击Attach 附加
这时候 程序就已经成功附加了
但是你发现 为什么没有加载呢 或者 为什么 我不能进行调试呢
原因是 你运行 你程序的时候 程序已经 运行很多模块 或者很多功能 之类 意思就是 程序已经运行了你所要调试的模块,解决办法
在 程序入口处 _tWinmain 的地方 加隔断 我习惯用MessageBox(0,0,0,0); 来隔断 不要忘记在头文件 #include<Windows.h>
结果应该是如下图:
这时候不要点击 “确定”按钮,应该点击 Ctrl+Alt+p 选择你的进程 然后 双击 附加到你的编译器
然后会发现 程序进入了你 预先设置的 断点,接下来就可以根据你的需求一步一步的调试了。
这儿仅仅是 附加进程的调试方法,在windows 下 c++ 调试方法有很多 我先大概说几个 windbg 调试 (包括 分析 dump文件,挂载。。)、模块调试、进程调试、Pdb远程调试、内存检测、log/trace、二分注释法 。。等等 很多调试方法 接下来就介绍 教会大家用更多的调试方法