9

我在使用 Visual Studio 调试混合的 WPF/CLR/非托管本机 c++ 项目时遇到了一个有趣(相当烦人)的错误,此错误仅在 Windows XP 中发生。似乎我在程序中发生了内存损坏,其范围太大,无法在此处发布。我遇到的问题是,当程序中发生崩溃时,它只是退出而没有 VS 调试器尝试定位异常,我假设因为没有抛出任何异常。程序退出代码确实是我必须继续下去的唯一信息,它只是最小的 int 值。

有没有人遇到过这种情况,并且可能能够为我指出正确的方向,这意味着什么?

编辑:

继续调查这个问题,我发现有时我可以获得堆栈跟踪和异常,而不是直接退出程序。跟踪将我带到向量分配(推送)。在程序刚刚退出的场景中,这仍然是执行的最后一行。我假设我在某处有损坏的内存,尽管我希望这通常表现为程序转储而不是异常这一事实能够帮助我指出正确的方向。

4

1 回答 1

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

程序到达 INT3 指令并触发断点。但是没有调试器存在,因此终止程序。它可能是您在代码中留下的杂散的 __debugbreak(),当程序状态损坏时,它可能由狂野的跳转触发。

你需要调试它。如果您不能在您的开发机器上轻松地复制它,那么您将需要来自故障机器的小型转储。

于 2012-07-21T17:31:29.707 回答