2013-07-15 38 views
0

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

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

回答

1

它是一个函数,而不是一个变量。它返回一个指向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伪变量对话框中,像这样的:

enter image description here

+0

神奇的解决方案。如果我是正确的,返回地址应该总是存储在eax中,所以切换到反汇编窗口甚至不是必需的。 –

+0

你需要检查你的代码是否看起来很相似。我不知道,你没有指定你的编译器版本或编译设置。 –