所以这很奇怪,可能有一个非常简单的解释,但是我使用的是一台我通常不会使用VS 2010的出厂默认安装开发的机器。下面发布的代码正是如此我正在跑步,这引起了这个熟悉的消息:
Windows在ProjectB.exe中触发了断点。
这可能是由于堆的损坏,这表明ProjectB.exe或它已加载的任何DLL中存在错误。
这也可能是由于用户在ProjectB.exe具有焦点时按下F12。
输出窗口可能包含更多诊断信息。
代码是:
#include <iostream>
#include <cstdlib>
using namespace std;
int main( int argc, char** argv )
{
system( "pause" );
return 0;
}
就是这样!没有更多,只有一个文件。注释掉系统(“暂停”)不会触发中断,但我无法阻止程序退出(正如您所期望的那样)。所以我真的很困惑。这对我来说真的很奇怪,因为我以前从未经历过这种情况,我不明白为什么这会导致问题。使用另一个不会停止进程的系统命令(如system(“cls”))也不会导致问题。我倾向于这是我正在研究的机器特有的,但我不确定。提前谢谢!
感谢任何帮助。
[编辑]
所以我以前从未调试过标准标题(至少没有故意),但我注意到了一件事:
在__crtCorExitProcess
中,加载mscoree.dll模块的调用返回一个空句柄,这意味着它没有被加载。我不确定这是不是通常会发生的事情,但是这样做会跳过一段获取exit proc函数指针的代码。调用此方法之后调用ExitProcess
调用,并且从此处触发中断。
[编辑2]
调用
system( "pause" )
后,在输出窗口中生成以下内容: ProjectB.exe中0x750cc41f的第一次机会异常:Microsoft C ++异常:&gt; log4cxx :: helpers :: IOException在内存位置0x006ff1fc .. ProjectB.exe中0x750cc41f的第一次机会异常:Microsoft C ++异常:&gt; log4cxx :: helpers :: IOException在内存位置0x006ff344 .. SPLogger:setFile(C:\ ProgramData \ Safend \ Logs.18698 \ SPHook.log,true)调用失败。 SPLogger:IO异常:状态代码= 720005 SPLogger:没有名为[SPHookLog]的appender的输出流或文件集。
然后当调用ExitProcess时,会将其添加到输出窗口:
线程'Win32 Thread'(0x1ca8)已退出,代码为0(0x0)。 HEAP [ProjectB.exe]:HEAP:自由堆块21a4ba8在被释放后在21a4c10修改
这对我很好奇。
答案 0 :(得分:1)
我认为这里的问题是运行的安全软件阻止某些DLL被加载和/或注入代码以防止恶意指令被执行。由于我从来没有在个人计算机上遇到过这种情况,而且只是在一个有很多安全管理的公司包装盒上遇到这种情况,我认为就是这样。我怀疑这是一个运行时不匹配,因为没有其他产生意外的结果。谢谢所有评论潜在问题的人!如果您遇到此问题,请阅读评论,因为此处还有其他潜在问题。