程序已退出,并带有代码-2147483645

问题描述:

我在使用Visual Studio调试混合的WPF/CLR /非托管本机C++项目时遇到了一个有趣的(相当烦人的)错误,该错误仅在Windows XP中出现。看起来我在程序中发生了内存损坏,其范围太大而无法在此处发布。我遇到的问题是,当程序发生崩溃时,它只是退出而没有VS调试器试图找到一个异常,因为没有被抛出。程序退出代码实际上是我必须去做的唯一信息,它只是最小的int值。程序已退出,并带有代码-2147483645

有没有人遇到过这个问题,并且可能能够将我指向正确的方向,这意味着什么?

编辑:

继续调查这个问题,我已经发现,我可以有时会得到一个堆栈跟踪和异常,而不是一个直线程序退出。跟踪将我带入矢量分配(推送)。在程序刚刚退出的情况下,这仍然是最后一行执行。我假设我在某处存在损坏的内存,尽管我希望通常将其本身表现为程序转储,而不是例外,这可以帮助我指出正确的方向。

+0

是否有一个exit()语句或来自descturcor的throw这两个我已经看到导致指示的行为。 – rerun 2012-07-20 17:09:32

+5

退出代码可能会更有意义地解释为HRESULT ==> 0x80000003 – jglouie 2012-07-20 17:10:05

+0

@rerun您可能会使用析构函数抛出某个东西,但我会仔细研究它。 – jimmyjambles 2012-07-20 17:15:21

// 
// MessageId: STATUS_BREAKPOINT 
// 
// MessageText: 
// 
// {EXCEPTION} 
// Breakpoint 
// A breakpoint has been reached. 
// 
#define STATUS_BREAKPOINT    ((NTSTATUS)0x80000003L) 

该程序落在INT3指令并触发了一个断点。但是没有调试器存在,所以终止程序。它可能是你在代码中遗留的__debugbreak(),当程序状态被破坏时,它可能被一个狂野的跳跃所触发。

你需要调试它。如果你不能在你的开发机器上轻松地重新制作它,那么你将需要一台来自失败机器的小型转储器。

+0

感谢您的回答,我尽可能在Windows XP虚拟机上安装Visual Studio。重新编译并使用调试器在本地运行,程序仍然退出。被调用的最后一行是分配。 – jimmyjambles 2012-07-21 18:20:27

+0

我不知道,这不是XP的典型行为。听起来像堆腐败当然。调试+例外,勾选投掷框。 – 2012-07-21 18:25:57

+1

正在访问一个超过数组上限的字节,我想通过我得到的是没有任何东西抛出。再次感谢 – jimmyjambles 2012-07-22 17:20:41