CreateProcess (): «Программа слишком большая, чтобы поместиться в памяти» - PullRequest
1 голос
/ 23 марта 2011

Я сейчас пытаюсь отладить мой Crash-Handler, это внешний исполняемый файл, который вызывается, когда моя программа находит необработанное структурированное исключение. Я перекомпилировал исполняемый файл обработчика сбоев, и при тестировании я получил сообщение: «Программа слишком велика, чтобы уместиться в памяти».

Немного покопавшись, я обнаружил, что это было вызвано вызовом 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))

1 Ответ

2 голосов
/ 23 марта 2011

Оказывается, что одна из моих ловушек после сборки копировала exe-файл из репозитория управления исходным кодом, и файл, который у меня был в репозитории управления исходным кодом, был фактически pdb.Во время тестирования я копировал непосредственно в мою рабочую папку, а затем ловушка снова копировала «испорченный» exe.

...