C++ Visual Studio 2012-未设置错误时中断

C++ Visual Studio 2012-未设置错误时中断,c++,c,visual-studio,visual-studio-2012,breakpoints,C++,C,Visual Studio,Visual Studio 2012,Breakpoints,我在几百行代码中的某个地方发现了一个域错误,我想找出是哪一行引起的。我的第一个想法是在\u errno()上设置一个数据断点(由于errno宏扩展为*\u errno(),我推断\u errno()应该给出存储errno错误代码的地址)。但是,Visual Studio抱怨标识符\u errno未定义 在Visual Studio中设置errno时,正确的中断方法是什么 它是一个函数,而不是一个变量。它返回指向int的指针,您需要知道该指针值以设置数据断点 最好的方法是在main()的开头写这行

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

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

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

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

并在下一行设置断点。切换到“反汇编”窗口,它通常类似于:

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伪变量,如下所示:


绝妙的解决方案。如果我是正确的,那么返回地址应该总是存储在eax中,因此切换到反汇编窗口应该是没有必要的。您需要检查代码是否类似。我不知道,您没有指定编译器版本或生成设置。
011013C0  call        dword ptr [__imp___errno (11082BCh)] 
011013C6  cmp         esi,esp 
011013C8  call        @ILT+320(__RTC_CheckEsp) (1101145h) 
011013CD  mov         dword ptr [eax],0