Что представляет собой 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
7
class 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=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

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=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

Удачной отладки!

Рапорт о сбое программы — minidump для VisualStudio и GCC
Метки:                            

Одно мнение о “Рапорт о сбое программы — minidump для VisualStudio и GCC

  • Среда Сентябрь 30, 2009 на 21:07
    Постоянная ссылка

    Отличная статья.
    Давно хотел почитать что-то подобное — но руки не доходили! ?ногда такая вещь необходима. )
    Спасибо!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *