Зачем нужен дамп и как его сделать
17 июня, 2016 Оставьте комментарий
Знания и навыки требуемые для освоения материала:
- Работа с командной строкой
- Работа с архиватором (запаковать/ распаковать файл)
Для выявления причин сложных ошибок в программе TSLab может понадобится дамп памяти программы. Далее я расскажу в каких случаях он поможет и как его получить. Что такое дамп можно почитать здесь.
В начале небольшое введение, что из себя представляет код программы TSLab. Программа построена на управляемом коде и выполняется под управлением .NET Framework. Но для получения данных от брокера она взаимодействует с кодом провайдера данных, который в существующих вариантах (Transaq, SmartCom, Alor) выполнен в виде неуправляемого кода или машинного кода.
Если происходит ошибка в управляемом коде то она перехватывается внутри программы и, в зависимости от ошибки, или просто делается запись в лог-файл и продолжается выполнение программы или, для тяжелых ошибок, выводится диалог и программа аварийно завершается. В случае ошибки в неуправляемом коде .NET Framework в большинстве случаев перехватывает их превращает их в управляемое исключение, которое потом перехватывает программа. Но при определенных ошибках, как например
программа просто аварийно завершается без передачи управления в программу. В этом случае ни о какой записи в лог и речи не идет. В данном случае для выяснения причин где и из-за чего произошла ошибка поможет дамп.
Еще в одном случае он поможет в выяснении причины. Это в случае когда программа “зависает”, т.е. перестает реагировать на действия пользователя. В этом случае в логе программы тоже ничего не будет. Но здесь надо отличать зависание программы от замедленной реакции программы под нагрузкой. Такое поведение например получается когда на слабом компьютере запустить многопоточную оптимизацию и одновременно открыть много окон с быстроменяющимися инструментами.
Что делать в вышеперечисленных случаях? К сожалению по логам и тем более по скриншоту в данных ситуациях невозможно понять причину ошибки. Тут надо получать дамп и анализировать его. До недавнего времени считали что в таких случаях единственный вариант, это договариваться с пользователем о доступе на компьютер, т.к. получение дампа требовало установки специальных инструментов и умения работать с ними, что конечно нельзя предлагать обычным пользователям. В случае с паркингом это еще срабатывало, но в обычных случаях это проблематично.
Решение нашлось в виде относительно новой бесплатной программы ProcDump от известного автора Русиновича. Она позволяет создавать дамп при определенных условиях, которые задаются в командной строке. Давайте разберем что надо сделать для получения дампа в случаях зависания и краха программы. Предварительно надо установить на компьютер программу.
- Скачать procdump.zip с http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx
- Распаковать procdump.zip в какой-либо каталог, например c:\utils.
- Открыть окно командной строки. Пуск -> Все программы -> Стандартные -> Командная строка.В случае работы под Vista или Windows 7 запускать надо от имени администратора. Для запуска с правами администратора, необходимо сделать следующее: Пуск — Все программы — Стандартные — Командная строка. Жмем правую клавишу и выбираем Запуск от имени администратора.
- С командной строки перейти в папку где распакован procdump
- Запустить программу procdump. При первом запуске она выводит окно с пользовательским соглашением, которое надо принять.Далее шаги для случая зависания и краха отличаются. Рассмотрим случай зависания, это более простой случай. В момент когда программа зависла надо запустить procdump со следующими параметрами:C:\utils>procdump -ma TSLabApp.exe crash.dmp
После этого в текущей папке создастся файл crash.dmp.В случае с крахом(падением) программы все обстоит сложнее. В тот момент когда появился диалог об ошибке уже поздно что-то делать. В этот момент программа уже аварийно завершилась. Дальнейшие действия имеет смысл предпринимать только если подобная ошибка проявляется регулярно и в определенных ситуациях, например при выходе из программы после того как программа отработала весь день. В этом случае перед этим надо запустить программу procdump со следующими параметрами:
C:\utils>procdump –e -w -ma TSLabApp.exe crash.dmp
Программа выполняется до тех пор пока не завершиться выполнение TSLabApp.exe, и в случае если она завершиться с ошибкой то создастся дамп. - Размер дампа варьируется от условий работы программы. Он хорошо сжимается, поэтому для пересылки его лучше запаковать, размер архива получится по крайней мере в два раза меньше исходного файла, и вложить его в сообщение на сайте поддержки http://support.tslab.ru/ с описанием ситуации.
Также есть еще один путь создания лога при падении программы, который работает на Windows 7. Для этого надо загрузить файл dump.reg (делается полный дамп) и кликнуть на нем. При этой операции требуются права администратора. Появится окно подтверждения, на котором надо ответить утвердительно.
После этого при падении программы TSLab в каталоге CrashDumps на диске с: будет создаваться дамп. В файле настроено, что максимально число дампов будет 2, далее новый дамп будет переписывать предыдущий. Более подробно можно почитать в msdn (на английском).
Дамп будет создаваться только при падении программы TSLab.
В дальнейшем, чтобы удалить данную функциональность, надо с помощью программы regedit удалить ветку реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps.