我在几百行代码中的某个地方遇到了域错误,我想找出是哪一行导致了它。我的第一个想法是设置一个数据断点_errno()
(由于errno
宏扩展为*_errno()
,我推断_errno()
应该给出存储 errno 错误代码的地址)。但是,Visual Studio 抱怨标识符_errno
未定义。
在 Visual Studio 中设置 errno 时,正确的中断方法是什么?
我在几百行代码中的某个地方遇到了域错误,我想找出是哪一行导致了它。我的第一个想法是设置一个数据断点_errno()
(由于errno
宏扩展为*_errno()
,我推断_errno()
应该给出存储 errno 错误代码的地址)。但是,Visual Studio 抱怨标识符_errno
未定义。
在 Visual Studio 中设置 errno 时,正确的中断方法是什么?
它是一个函数,而不是一个变量。它返回一个指向 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 伪变量,如下所示: