2011-03-23 74 views
1

我目前正在尝试调试我的Crash-Handler,它是一个外部可执行文件,当我的程序发现未处理的结构化异常时会被调用。我重新编译了crash-handler可执行文件,当我测试时,我收到一条消息:“程序太大而不适合内存”。CreateProcess():“程序太大,不适合内存”

经过深入研究,我发现这是由我的未处理的异常过滤器中的CreateProcess调用引起的。我发现this post,说这个错误信息表明该可执行文件已损坏,但是如果我从命令行调用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)) 

回答

2

原来,我的构建后钩一个被复制了从源头上控制存储库中的exe文件,我只好在源代码控制库文件是实际上是pdb。测试时,我直接复制到我的正在运行的文件夹,然后钩子将复制“损坏”的exe再次。