Win32 - Обратная трассировка из кода C

В настоящее время я ищу способ получить информацию об обратной трассировке под Windows из кода C (не C ++).

Я создаю кроссплатформенную библиотеку C со ссылкой - подсчет управления памятью. Он также имеет встроенный отладчик памяти, который предоставляет информацию об ошибках памяти ( XEOS C Foundation Library ).

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

enter image description here

В Linux или Mac OS X я могу поискать execinfo. h , чтобы использовать функцию backtrace , чтобы я мог отображать дополнительную информацию об ошибке памяти.

Я ищу то же самое в Windows.

Я видел Как можно получить трассировку стека в C? в Stack Overflow. Я не хочу использовать стороннюю библиотеку, поэтому функции CaptureStackBackTrace или StackWalk выглядят хорошо.

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

Я не привык к программированию Windows, так как обычно работаю в системах, совместимых с POSIX.

Каковы некоторые объяснения этих функций и, возможно, некоторые примеры?

EDIT

Сейчас я рассматриваю возможность использования функции CaptureStackBackTrace из DbgHelp.lib , кажется, накладных расходов немного меньше ...

Вот что я пробовал до сих пор:

unsigned int   i;
void         * stack[ 100 ];
unsigned short frames;
SYMBOL_INFO    symbol;
HANDLE         process;

process = GetCurrentProcess();

SymInitialize( process, NULL, TRUE );

frames = CaptureStackBackTrace( 0, 100, stack, NULL );

for( i = 0; i < frames; i++ )
{
    SymFromAddr( process, ( DWORD64 )( stack[ i ] ), 0, &symbol );

    printf( "%s\n", symbol.Name );
}

Я просто получаю хлам. Думаю, мне следует использовать что-то еще, кроме SymFromAddr .

43
задан Community 23 May 2017 в 10:29
поделиться