如何在Visual Studio中debugging时执行GetLastError()

你正在通过C / C ++代码,只是调用失败的Win32 API(通常是返回一些无用的通用错误代码,如0)。 您的代码不会进行后续GetLastError()调用,您可以检查其返回值以获取更多错误信息。

如何在不重新编译和重现失败的情况下得到错误值? 在监视窗口中input“GetLastError()”不起作用(“语法错误”)。

如上所述, @err,hr伪寄存器将显示最后一个错误值, @err,hr将显示错误(如果可以的话)。

据Visual Studio团队的成员Andy Pennell介绍,从VS 7(Visual Studio .NET 2002)开始,使用'@'字符表示伪寄存器已被废弃 – 他们更喜欢使用'$'(如$err,hr )。 目前支持$和@。

您也可以在条件断点中使用$ err伪寄存器; 所以只有在最后一个错误不为零的情况下,才可以在一行代码中断开。 这可以是一个非常方便的技巧。

您可能会发现一些其他伪寄存器(来自John Robbins出色的书“debuggingMicrosoft .NET和Microsoft Windows应用程序” ):

  • $tib – 显示线程信息块
  • $clk – 显示时钟计数(对定时function有用)。 为了更容易地使用这个,放置一个$clk手表,然后额外的$clk=0手表。 在显示当前值后,第二只手表将清除伪寄存器,所以下一步或步骤只会给您提供该动作的时间。 请注意,这是一个粗略的计时,包括一些debugging开销,但它仍然是非常有用的。

在观察窗口中的ERR,hr通常是这样做的

“编辑并继续”添加代码,以便您可以看到错误(只是不要创build一个新的全局variables来存储它)。 如果你能够快速地调用一个执行这种error handling代码的预先存在的函数,那么它工作得很好。

作为奖励,您也可以将新的代码留在未来。

如果你不能这样做,那么QBziZ是正确的“ERR,hr”呢。