Отладка программы, которая не запускается - PullRequest
3 голосов
/ 25 февраля 2009

Как мне определить, почему не запускается приложение VB6 (или 5)? Я не могу подключить к нему отладчик из-за этого. У меня есть бесплатная программа IDA Pro, но мне нужны некоторые указания относительно того, с чего начать.

У меня нет источника для этой программы, только .exe. Когда я говорю, что он не запускается, я дважды щелкаю по .exe, и ничего не происходит - не осталось запущенного процесса - nadda.

При запуске под администратором он создает три пустых папки, а затем завершает работу без вывода сообщений перед отображением пользовательского интерфейса. OllyDbg говорит мне, что был «неточный результат с плавающей запятой», но мне нужно потратить несколько часов или дней на изучение всей информации, которую дает мне OllyDbg. Моя книга по Advanced Windows Debugging должна появиться и в понедельник или во вторник.

Ответы [ 15 ]

12 голосов
/ 12 марта 2009

Вы говорите, что программа запускается, но вылетает, прежде чем вы можете прикрепить? Если это так, попробуйте запустить программу под отладчиком.

В Visual Studio вы можете сделать это, перейдя на

  • Файл -> Открыть проект
  • Выберите нужный EXE-файл
  • Хит F5
11 голосов
/ 02 марта 2009

Кажется, я много отвечаю, но попробуйте просмотреть журнал событий Windows. Здесь часто можно найти полезную информацию, такую ​​как элемент управления, или dll, от которой ваша программа зависит, не найдена.

9 голосов
/ 13 марта 2009

Во-первых, посмотрите Dependency Walker , который сообщит вам, если отсутствуют какие-либо библиотеки DLL, необходимые приложению.

Во-вторых, как называется исполняемый файл? Попробуйте переименовать его в MYDUMMY.EXE и запустить снова. Есть некоторые имена, которые не работают, потому что они уже используются. Однажды я помог новому программисту, который пытался запустить его первое приложение в течение двух недель. Он назывался DISPLAY.EXE, который уже является модулем Windows, поэтому он не загружается.

5 голосов
/ 13 марта 2009

Вы пытались запустить его в оболочке cmd, чтобы увидеть, возвращает ли он какие-либо данные на консоль? Созданы ли какие-либо файлы журналов?

Даже если вы не можете подключить отладчик, так как программа не запущена, вы можете запустить его из отладчика, OllyDbg позволит вам сделать это, как и любой другой отладчик, который стоит того После чего вы можете попробовать отладку, почему код не запускается.

4 голосов
/ 15 марта 2009

Я бы использовал SysInternals Process Monitor, особенно следуя некоторым советам из Случая необъяснимого видео семинара.

Запустите мониторинг (все) непосредственно перед его запуском, затем прекратите мониторинг, когда почувствуете, что все сделано не так, что должно быть через несколько секунд. После этого вы получите подробный журнал всех событий, которые произошли во всех процессах. Вы можете выполнить поиск по имени вашего процесса и найти неуспешные действия, такие как, возможно, отсутствие разрешений или получение какой-либо другой жалобы от системы, о которой она не сообщает пользователю, потому что вы не кодировали в общей ловушке ошибок с диалог. Ну, может быть, даже если бы у вас было это не может показать диалог по какой-то причине. И журнал мониторинга процесса расскажет вам об этом.

Это похоже на автоматическую регистрацию без кодирования в куче журналирования.

3 голосов
/ 18 марта 2009

Ну, как уже упоминалось dlamblin , я бы взял ProcExp, FileMon и RegMon из sysinternals и настроил их для мониторинга этого процесса, а затем попытался запустить его. Вы НЕ СМОЖЕТЕ получить некоторую информацию об одном из следующих действий:

  • Файлы конфигурации, которые он пытается открыть / получить доступ
  • Ключи реестра, которые он ищет
  • Уровни ошибок, возвращаемые процессом при его выходе

Если это не удастся, возьмите бесплатный VBDecompiler и посмотрите, что эта штука делает в своем коде запуска, который может куда-то вас привести ... Если вы генерируете исключение, и у них есть

:Err

введите метку, эта метка может просто провалиться и выйти без предупреждения или чего-либо еще ...

Используемый мной VBDecompiler был назван «setup_free-VBDecompiler.zip». Вы можете найти его в Google, возможно, даже лучшая версия к настоящему времени. Но не ожидайте, что он будет декомпилирован в исходный код, он может только сделать его «лучшим предположением», но это может быть удобно, по крайней мере, чтобы преодолеть это препятствие ... Будьте осторожны, внимательны и уважительны любое лицензионное соглашение, которое может помешать ЛЮБОМУ реверс-инжинирингу ...

Дайте мне знать, помогла ли эта информация. Если вы все еще не можете найти что-либо, соединитесь со мной и отправьте мне .exe, и я могу запустить его в моей обычной песочнице Norman, которая может дать нам больше информации о выполненных вызовах функций и о том, что приложение пытается сделать ...

3 голосов
/ 26 февраля 2009

У вас может не быть большой удачи без источника, но вы можете посмотреть этот совет в MSDN для автоматического запуска отладчика. Это немного неуклюже, но работает с любой программой. Я считаю, что хорошо работающие приложения C ++ останавливаются на главном. Это может быть спасителем для ранних ошибок.

1 голос
/ 18 марта 2009

1.) Если у вас MS Visual Studio 2005, она позволяет запускать ее из командной строки следующим образом:

devenv.exe is the executable(mostly in installation path e.g.(C:\Program Files\Microsoft Visual Studio 8\Common7\IDE) 

запустите devenv.exe - помогите с параметрами командной строки Я нашел несколько подходящих вариантов для вашего случая:

devenv.exe / debugexe
Откройте указанный исполняемый файл для отладки. Остальная часть командной строки передается этому исполняемый файл в качестве аргументов.

Надеюсь, это поможет.

-AD

1 голос
/ 13 марта 2009

Вы можете написать простую стартовую программу, которая вызывает CreateProcess () с флагом CREATE_SUSPENDED в параметре dwCreationFlags .

Она запустит отлаживаемую вами программу, и ее поток будет немедленно заморожен. Тогда вы можете прикрепить.

Основная программа может подождать, скажем, полминуты, а затем вызвать ResumeThread (). К этому времени вы подключите отладчик.

1 голос
/ 13 марта 2009

Попробуйте проверить журнал событий на наличие связанных сообщений.

Используйте Filemon, чтобы проверить, пытается ли приложение получить доступ к каким-либо файлам (без конфигурации? Позволяет выйти без сообщения об ошибке ..)

http://technet.microsoft.com/en-us/sysinternals/bb896642.aspx

Я полагаю, что есть похожая программа для проверки того, что приложение пытается сделать с реестром.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...