在学习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文件:

image

编译好后,直接运行:

image

然后打开vs,找到调试/附加到进程:

image

完成后,在命令行那边按任意键。vs这边就弹出断点触发对话框了:

image

点击中断,便可以看到当前指令的反汇编代码了。

image

如果要进行源代码级调试,只需要在cl的时候加上/ZI。

cl /ZI

同样的方法,触发断点后,vs调试器就自动打开源代码文件了。

image

如果还想兼容调试器和非调试器同时运行的话,就加上try吧:

 

int main(int argc, char ** argv)
{
	__try
	{
		system("pause");
		__asm{int 3}
	}
	__finally
	{
		... // 真正的代码
	}
posted on 2011-10-16 15:38  chrihop  阅读(2010)  评论(1编辑  收藏  举报