0

我在几百行代码中的某个地方遇到了域错误,我想找出是哪一行导致了它。我的第一个想法是设置一个数据断点_errno()(由于errno宏扩展为*_errno(),我推断_errno()应该给出存储 errno 错误代码的地址)。但是,Visual Studio 抱怨标识符_errno未定义。

在 Visual Studio 中设置 errno 时,正确的中断方法是什么?

4

1 回答 1

2

它是一个函数,而不是一个变量。它返回一个指向 int 的指针,您需要知道该指针的值才能设置数据断点。

最好的方法是在 main() 的开头编写这行代码:

 errno = 0;

并在下一行设置断点。切换到反汇编窗口,它通常如下所示:

011013C0  call        dword ptr [__imp___errno (11082BCh)] 
011013C6  cmp         esi,esp 
011013C8  call        @ILT+320(__RTC_CheckEsp) (1101145h) 
011013CD  mov         dword ptr [eax],0 

所以在我的例子中,EAX 寄存器具有设置数据断点的地址。只需检查一次您的代码是否相似。在对话框中使用@eax 伪变量,如下所示:

在此处输入图像描述

于 2013-07-15T18:30:31.573 回答