您正在单步执行C/C++代码,并且刚刚调用了失败的Win32 API(通常通过返回一些无用的通用错误代码,如0).您的代码不会进行后续的GetLastError()调用,您可以检查其返回值以获取更多错误信息.
如何在不重新编译和重现故障的情况下获得错误值?在Watch窗口中输入"GetLastError()"不起作用("语法错误").
如前所述,@err
伪寄存器将显示最后一个错误值,并将@err,hr
错误显示为字符串(如果可以).
根据Visual Studio团队成员Andy Pennell的说法,从VS 7开始(Visual Studio .NET 2002),使用'@'字符表示伪寄存器已被弃用 - 他们更喜欢使用'$'(如$err,hr
) .暂时支持$和@.
您还可以在条件断点中使用$ err伪寄存器; 因此,只有在最后一个错误为非零时才能中断一行代码.这可能是一个非常方便的技巧.
您可能会发现其他一些伪寄存器(来自John Robbins的优秀书籍"Microsoft .NET和Microsoft Windows调试应用程序"):
$tib
- 显示线程信息块
$clk
- 显示时钟计数(对计时功能有用).为了更方便地使用它,请放置一块$clk
手表,然后再放一块$clk=0
手表.第二个监视器将在显示当前值后清除伪寄存器,因此下一步或步骤将为您提供仅执行该操作的时间.请注意,这是一个粗略的时序,包括相当多的调试器开销,但它仍然非常有用.
ERR,hr
在观察窗口通常可以做到这一点