Какой инструмент можно использовать, чтобы перехватить все входные данные, вызывающие сбой приложения? - PullRequest
4 голосов
/ 11 января 2011

Мне нужен инструмент Windows, который записывает ввод и отладочную информацию, которая вызывает сбой программы.Я не имею в виду нечеткий программный инструмент !Например, позвольте мне описать сценарий, чтобы объяснить, о чем я говорю.

Иногда во время использования программы происходит сбой без известной причины, а когда я хочу отладить ее, я не могу найтиполезная информация, чтобы узнать, как произошел сбой, потому что данных, которые вызвали сбой, больше нигде не существует.

Поэтому мне нужен инструмент, записывающий все входные данные и отладочную информацию, чтобы иметь возможность повторно использовать входные данные и воспроизводить сбойпод отладчиком, таким как Immunity Debugger и OllyDbg , чтобы понять, как произошел сбой.

РЕДАКТИРОВАТЬ: Мне нужно уметь делатьэто для программы, которую я не написал.Предположим, что у меня нет доступа для просмотра или изменения его исходного кода.

Ответы [ 3 ]

1 голос
/ 11 января 2011

Какой компилятор / IDE вы используете?

Скорее всего, он включает в себя отладчик, который можно подключить к любому запущенному процессу (например, к вашему приложению), независимо от того, запустили ли вы его из среды IDE или нет. Это позволит вам видеть текущие значения переменных и предоставлять вам трассировку стека (или полезную диагностическую информацию) всякий раз, когда ваша программа неожиданно завершает работу. Отладчик, который поставляется с Visual Studio, особенно хорош, если вы разрабатываете приложение на C ++ или .NET.

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

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

Есть несколько библиотек журналов, которые вы можете использовать, чтобы упростить эту работу. Однако, не зная, на каком языке вы работаете, сложно дать конкретные рекомендации. Например, если вы разрабатываете приложение .NET, Log4Net является отличным выбором . Я слышал хорошие новости о Log4j для разработки на Java. log4cxx - опция для приложений C ++. Также см. этот вопрос относительно лучших практик .

0 голосов
/ 11 января 2011

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

Вывод в старом стиле - drtwsn32.log (версия Windows от NT 4.0 до фактической Windows 7 помещает этот файл в другое место на диске, просто посмотрите на этот файл), который дает вам трассировку стека, реестры и небольшой объем памяти. свалка. На самом деле у вас должен быть файл .map исходной программы, чтобы определить функцию, которая дает сбой, и даже строку кода, в которой происходит сбой (есть удобный метод, который я начал использовать давным-давно ... но вам нужен полный файл MAP).

Более поздняя версия drwtsn32 создает набор файлов. Они

  • appcompat.txt
  • manifest.txt
  • Программа .exe.hdmp
  • Программа .exe.mdmp

Это память и дамп процесса. Откройте его с помощью Microsoft IDE / Debugger как Visual Studio 2008/2010 и посмотрите.
Он показывает полный стек вызовов, состояние памяти, все реестры и так далее. Если у вас также есть файл .pdb программы, которая дает сбой, вы должны знать, что это за функция и строка кода, но ... я полагаю, что без исходного файла вы работаете в темноте.

Итак ... Файл MAP или файл PDB должен присутствовать, или я думаю, что вам предстоит очень тяжелая работа.

НТН

0 голосов
/ 11 января 2011

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

windbg

или

Debugdiag

, чтобы получить аварийные дампы.Я нашел это действительно полезным

...