2007-09-21 14:56:45
2007-09-21 14:35:01
2007-09-21 14:31:07
MSVC的调试技巧: Pseudoregisters
- 翻译自CodeProject.com
让我们从为什么写这篇文章开始. 一天, 一个学生让我帮助他解决一个调试问题. 为此我看着他单步进入代码, 当我看到如下代码:
int test = GetLastError();
他这样做事为了知道之前函数失败的错误代码. 每次他需要知道错误代码的时候都添加上面的代码行. 我建议他删除所有的代码行代之以调试”Watch”窗口当中添加”@ERR”. 他不知道这是什么, 在场的其他人也不知道这是什么技术. 所以我写下这篇文章给那些从未听说过”pseudoregisters”技术的人.
什么是”pseudoregister”技术?
“pseudoregister”并不是一个真正的硬件寄存器. 利用pseudoregister可以查看并且使用调试器当中的特定值(错误代码, 线程信息块, …).
让我们看看@ERR. 启动一个调试应用程序. 在你的代码放置断点便于调试器中断执行. 打开Watch窗口, 添加@ERR到窗口. 你可以在值列看到值为零. 现在可以调试你的代码并且查看数值. @ERR总是显示当前线程的GetLastError()数值. 当执行发生错误的时候, 数值就会改变了.
要测试, 写下如下导致错误的代码:
FILE *fp = fopen("c:\\a_file_that_does_not_exist.txt", "r");
步入上述代码行的时候,..
2007-09-21 14:27:57
2007-09-21 11:05:48