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