-
Рапорт о сбое программы – minidump для VisualStudio и GCC
Дата: Сентябрь 26th, 2009 Neill 1 комментарийЧто представляет собой minidump? Вот если приложение у клиенты было запущено из-под отладчика, то во время возникновения ошибки, отладчик бы показал место остановки в коде и появилась бы возможность посмотреть значения переменных в момент сбоя. Так вот minidump делает снимок, с помощью которого можно сделать тоже самое, но без всякого запущенного отладчика. Клиент запускает ваше приложение и по создаваемому minidump, вы сможете определить где находится место сбоя.
Правда способы создания таких minidump отличаются в VisualStudio и в GCC.
Для VS можно воспользоваться dbghelp.h (dll) для сохранения *.dmp файла. Затем этот файл запустить с помощью VS или WinDbg и посмотреть состояние стека и регистры точки сбоя.
Более подробно об этом можно почитать в цикле статей Кудинова Александра
Для GCC есть интересная вещь – MiniGW – utils, куда входит exchndl.dll. Достаточно подключить динамически эту библиотеку в программу и разместить данный файл рядом с исполняемым модулем программы и после сбоя будет создан текстовый *.rpt файл с информацией о состоянии стека и регистров в момент сбоя.
Код добавления библиотеки очень прост:
1
2
3
4
5
6
7class ExceptionHandler
{
public:ExceptionHandler()
{
LoadLibrary("exchndl.dll");
}
};static ExceptionHandler gExceptionHandler; // global instance of class Выглядеть рапорт для GCC будет так:
Error occured on Thursday, September 17, 2009 at 21:14:20.C:\Work\tuning\.code\CarTuning\bin\CarTuning.exe caused an Access Violation at location 00000000 Reading from location 00000000.Registers:eax=00000000 ebx=002423bb ecx=00000020 edx=00000000 esi=00380034 edi=00340039eip=00000000 esp=0022fedc ebp=0022fef8 iopl=0 nv up ei pl zr na po nccs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010246Call stack:0000000000445109 C:\Work\tuning\.code\CarTuning\bin\CarTuning.exe:00445109 WinMain C:/Work/tuning/.code/CarTuning/src/main.c:6100484D94 C:\Work\tuning\.code\CarTuning\bin\CarTuning.exe:00484D94 CConsol::CConsol0040124B C:\Work\tuning\.code\CarTuning\bin\CarTuning.exe:0040124B CConsol::CConsol004012B8 C:\Work\tuning\.code\CarTuning\bin\CarTuning.exe:004012B8 CConsol::CConsol7C817077 C:\WINDOWS\system32\kernel32.dll:7C817077 RegisterWaitForInputIdleError occured on Thursday, September 17, 2009 at 21:14:20.
C:\Work\tuning\.code\CarTuning\bin\CarTuning.exe caused an Access Violation at location 00000000 Reading from location 00000000.
Registers:
eax=00000000 ebx=002423bb ecx=00000020 edx=00000000 esi=00380034 edi=00340039
eip=00000000 esp=0022fedc ebp=0022fef8 iopl=0 nv up ei pl zr na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010246
Call stack:
00000000
00445109 C:\Work\tuning\.code\CarTuning\bin\CarTuning.exe:00445109 WinMain C:/Work/tuning/.code/CarTuning/src/main.c:61
00484D94 C:\Work\tuning\.code\CarTuning\bin\CarTuning.exe:00484D94 CConsol::CConsol
0040124B C:\Work\tuning\.code\CarTuning\bin\CarTuning.exe:0040124B CConsol::CConsol
004012B8 C:\Work\tuning\.code\CarTuning\bin\CarTuning.exe:004012B8 CConsol::CConsol
7C817077 C:\WINDOWS\system32\kernel32.dll:7C817077 RegisterWaitForInputIdle
Удачной отладки!
Программирование C++, debug, GCC, minidump, overview, Tips, VisualStudio, Win32One Response to “Рапорт о сбое программы – minidump для VisualStudio и GCC”
-
Отличная статья.
Давно хотел почитать что-то подобное – но руки не доходили! Иногда такая вещь необходима. )
Спасибо!
Добавить комментарий
-



Свежие комментарии