powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Exception tracer
5 сообщений из 5, страница 1 из 1
Exception tracer
    #34207411
egorovshura
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.

У меня такой вопрос. Есть ли какие-нить сторонние библиотеки или компоненты для VS C++ (2005), которые позволяют получать в релизнутой версии информацию об ошибках, как то call stack, желательно тип эксепшена.
Аналог дельфовых madExcept и EurikaLog.

Заранее спасибо
...
Рейтинг: 0 / 0
Exception tracer
    #34207542
egorovshura
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может другие кто какие способы использует для отлаживания нештатных ситуаций на машине клиента? Поделитесь опытом, господа!
...
Рейтинг: 0 / 0
Exception tracer
    #34208391
Den_di
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кроме макроса ASSERT ну и банальных _try _cetch _throw не припомню, но и они позволяют не позволить программе нагло вывалиться а корректно оюработать силами программиста данную неприятность.
...
Рейтинг: 0 / 0
Exception tracer
    #34208954
egorovshura
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да уж. Арсенал невелик. Delphi и .NET в этом отношении гораздо лучше.
...
Рейтинг: 0 / 0
Exception tracer
    #34211926
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Den_diкроме макроса ASSERT ну и банальных _try _cetch _throw не припомню, но и они позволяют не позволить программе нагло вывалиться а корректно оюработать силами программиста данную неприятность.

как говорится если не знаете, то не стоит идругих вводить в заблуждение. Достаточно в гугле поискать фразу : дамп стека


Самый простой способ: берем библиотеку BugslayerUtil.dll by Jeff Robbins (из книжки "Отладка прилождений", или колонки Bugslayer в MSDN Magazine (MSJ))

), перекрываем обработчик "необработанных" структурных исключений (см. SetUnhandledExceptionFilter), в котором пишем такой код (я даже весь файл приведу):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
# ifndef __ExcepCallback_h__
#   define __ExcepCallback_h__

# ifdef _USE_BL_

# include "D:/Projects/Robbins/Include/BugslayerUtil.h"
# pragma message ("Using library: D:/Projects/Robbins/Output/BugslayerUtil.lib")
# pragma comment(lib, "D:/Projects/Robbins/Output/BugslayerUtil.lib")

# include <windows.h>

// Globals to control what gets done here.
static BOOL             bGetFaultReason       = FALSE;
static BOOL             bGetStackTraceString  = FALSE;
static BOOL             bShowRegs             = FALSE;
static DWORD            dwOpts                =  0 ;
extern char             cbExcLogName[0x1000];

LONG __stdcall ExcepCallBack ( EXCEPTION_POINTERS * pExPtrs )
{
  if ( FALSE == bGetFaultReason 
    && FALSE == bGetStackTraceString 
    && FALSE == bShowRegs )
    return EXCEPTION_EXECUTE_HANDLER;

  FILE* os = fopen( cbExcLogName, "at" );
  if ( os != NULL )
  {
    time_t timer = time( NULL );
    fprintf( os, ctime(&timer) );
    if ( TRUE == bGetFaultReason )
      fprintf ( os, "%s\n" , GetFaultReason ( pExPtrs ) ) ;
    
    if ( TRUE == bShowRegs )
      fprintf ( os, "%s\n" , GetRegisterString ( pExPtrs ) ) ;
    
    if ( TRUE == bGetStackTraceString )
    {
      const char * szBuff = GetFirstStackTraceString ( dwOpts, pExPtrs ) ;
      while ( NULL != szBuff )
      {
        fprintf ( os, "%s\n" , szBuff ) ;
        szBuff = GetNextStackTraceString ( dwOpts , pExPtrs ) ;
      }
    }
    fclose( os );
  }

  return ( EXCEPTION_EXECUTE_HANDLER ) ;
}

# else
#   define ExcepCallBack( x ) EXCEPTION_EXECUTE_HANDLER
# endif // _USE_BL_

# endif // __ExcepCallback_h__



Примечание 0: это — плохой пример фильтра. В хорошем не должно быть обращений к CRT, но меня устроил и этот, а до нормального руки не доходят.

Данный код в зависимости от установленных переменных (глобальных, что в самом верху) делает следующее:
— при установленной bGetFaultReason — показывает строку-описание возникшей ошибки с адресом сбоя и интерпретацией необработанного исключения, а также модуль, в котором галюн.
— bShowRegs — показать регистры
— bGetStackString — сколько может, показывает стек.

Результат работы данного кода при сбое с bGetFaultReason == bGetStackTraceString == TRUE, а также с установленными всеми флагами для dwOpts (GSTSO_*) при релизе, собранном с отладочной иснформацией:

stest.exe caused an EXCEPTION_ACCESS_VIOLATION in module ntdll.dll at 001B:77F83941, RtlpWaitForCriticalSection()+0096 byte(s)
001B:77F83941 (0x00BE9E00 0x61039FA2 0x00BE9E7C 0x01738728) ntdll.dll, RtlpWaitForCriticalSection()+0096 byte(s)
001B:77F838C6 (0x2D617465 0x61726B75 0x2E656E69 0x2F6D6F63) ntdll.dll, NtQueryDefaultLocale()+0283 byte(s)

Это — далеко не единственный способ, и как это можно сделать вручную, можно посмотреть, например, в исходниках библиотеки BugslayerUtil. Также, VladD2 тут ранее интересовался этим вопросом, но в том топике не было подробного описания, а только ссылки.

http://msdn.microsoft.com/code/default.asp?url=/code/sample.asp?url=/MSDN-FILES/026/001/212/msdncompositedoc.xml

По этому урлу лежит некий тул. В его дереве (слева) найдешь BugslayerUtil, откроешь вкладку, и там есть все исходники dll-ки. Либо, на этой же странице кликай Download, и все будет хорошо. Там есть много лишнего, но BugslayerUtil.dll в исходниках есть

Потом дамп можно поднять в отладчике и посмотреть, что случилось.
Такие дампы умеет создавать dr Watson, но есть и другие tool'ы.

------------------------------------
еще есть такая функция : AfxDumpStack()

----------------------
Можно еще тут посмотреть :

Post-Mortem Debugging Your Application with Minidumps and Visual Studio .NET

http://www.codeproject.com/debug/postmortemdebug_standalone1.asp

----------------------------

Можно посмотреть с сторону StackWalk64 и прочих функций из библиотеки DbgHelp

http://msdn2.microsoft.com/en-us/library/ms680650.aspx
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Exception tracer
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]