1

我目前正在尝试调试我的崩溃处理程序,它是一个外部可执行文件,当我的程序发现未处理的结构化异常时会调用它。我重新编译了崩溃处理程序可执行文件,当我测试时,我收到一条消息:“程序太大而无法放入内存”。

经过一番挖掘,我发现这是由未处理的异常过滤器中的 CreateProcess 调用引起的。我发现这篇文章说此错误消息表明可执行文件已损坏,但是如果我从命令行调用 CrashHandler.exe,则不会收到此类错误。

其他信息:

  • 我已经尝试在调试和发布模式下多次重建我的应用程序和崩溃处理程序。
  • 我尝试给正在运行的线程增加 2 个数量级的堆栈空间。
  • 我在另一个已经在使用它的应用程序中测试了相同的 CrashHandler.exe,没有任何问题。
  • 我尝试使用以前版本的 exe,但结果相同。
  • 重新启动系统。

我对 CreateProcess 的调用:

//Fire off the Handler
//HandlerArgs = "CrashHandler.exe arg1 arg2 arg3 etc..."
if(CreateProcess(NULL, HandlerArgs, NULL, NULL, TRUE, CREATE_PRESERVE_CODE_AUTHZ_LEVEL | CREATE_SUSPENDED,
                 NULL, NULL, &StartupInfo, &NewProcessHandle))
4

1 回答 1

2

事实证明,我的构建后挂钩之一是从源代码控制存储库中复制 exe,而我在源代码控制存储库中拥有的文件实际上是 pdb。在测试时,我直接复制到我正在运行的文件夹中,然后钩子会再次复制“损坏”的 exe。

于 2011-03-23T05:14:43.923 回答