在学习c++时,我喜欢写一些小程序,以验证某个想法的正确与否。这些小程序通常只有一两个cpp文件和几个头文件,用Visual Studio提供的cl.exe直接在命令行中编译很方便,但是如果要调试或者只是看一下运行时的反汇编信息,就比较痛苦了。
windbg看似可以解决这个问题,但是使用起来极不习惯,而建一个vs solution或者project又太麻烦了,还要消耗大约10MB的磁盘空间用来存放ncb文件。
今天想到一个方法,来解决这个问题。
首先,vs的调试器有附加到进程(Attach to process)的功能,但是怎么让程序在main()函数入口处停下来呢?
其实只需要在main()函数后面加上这两句话就行了:
int main(int argc, char ** argv) { system("pause"); __asm{int 3}
当然,要调用system()宏,首先要包含:
#include <stdlib.h>
这个头文件。
然后,用cl编译我们的cpp文件:
编译好后,直接运行:
然后打开vs,找到调试/附加到进程:
完成后,在命令行那边按任意键。vs这边就弹出断点触发对话框了:
点击中断,便可以看到当前指令的反汇编代码了。
如果要进行源代码级调试,只需要在cl的时候加上/ZI。
cl /ZI
同样的方法,触发断点后,vs调试器就自动打开源代码文件了。
如果还想兼容调试器和非调试器同时运行的话,就加上try吧:
int main(int argc, char ** argv) { __try { system("pause"); __asm{int 3} } __finally { ... // 真正的代码 }