Visual Studio 2012 - 当errno集合中断时
问题描述:
我在几百行代码中找到了一处域错误,我想找到哪一行导致它。我的第一个想法是在_errno()
上设置一个数据断点(因为errno
宏扩展为*_errno()
,我推断_errno()
应该给出存储errno错误代码的地址)。但是,Visual Studio抱怨标识符_errno
未定义。Visual Studio 2012 - 当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伪变量对话框中,像这样的:
神奇的解决方案。如果我是正确的,返回地址应该总是存储在eax中,所以切换到反汇编窗口甚至不是必需的。 –
你需要检查你的代码是否看起来很相似。我不知道,你没有指定你的编译器版本或编译设置。 –