2011-03-23 65 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再次。