vc++debug error,vc++6.0怎么debug
我们在调用WINDOWS函数时,往往要在后面加上一个GetLastError()来获取函数出错的错误码和原因。如果WINAPI在调试状态下出错,那么我们就要再次停下来,添加一个GetLastError(),然后运行。这就不方便调试了。其实我们可以利用VC中的一些固定符号进行调试。
先说第一个@ERR。当我们等待函数执行完,确定是错误的时候,那么我们就可以在VC的WATCH窗口中添加@ERR,然后马上就可以看到错误代码了。如果我们还想知道错误码的含义,那么我们可以加上@ERR,hr,这样错误码和错误信息就清晰的显示出来了。
这种调试方法是不是很棒?其实这个伪符号还有另外一个用途。在调试过程中,我们可以使用这些伪符号来设置断点停止的条件。例如,下面两行代码:
FILE * FP=fopen( c:a _ FILE _ the _ does _ not _ exist . txt , r );
int nT=123
我们在第二行添加断点,然后按CTRL B(或者ALT F9或者Edit- Breakpoints),选中这个断点,然后点击Condition,输入@ERR==2,按F5调试我们的程序,当@ERR为2时程序会在断点处停止。如果我们不想让它在2的时候停下来,我们就输入@ERR!=2,爽,这个功能可以说有很多应用,就等你去实战了。
除了@ERR,还有很多伪符号,比如@TIB,就是获取线程ID的符号。这个符号在多线程程序的调试中可以起到很大的作用。当我们有一个函数被多个线程调用时,当我们在这个函数中设置一个断点时,无论哪个线程调用这个函数,都会在这个断点处停止。这时候,如果我们想知道是哪个线程调用了它,可以在手表窗口写@TIB,我们会看到类似2147344384这样的数字。那就是线程ID(也可以是这种格式:0x7ffa6000)。我们也可以在断点管理的条件下写@TIB==0x7ffa6000,这样在其他线程调用这个函数的时候就不会停止。只有ID为0x7ffa6000的线程有,才会停止。
上面介绍了两个伪符号,其实还有很多。这里有一个表格供你参考:
伪寄存器的完整列表
当前线程的线程信息块;这是必要的,因为调试器不处理“FS:0”格式
[表格摘自约翰罗宾斯的《调试应用程序》]
本文引用了代码项目的一篇文章:使用伪寄存器在MSVC调试的介绍
查看本文的来源