В настоящее время я ищу способ получить информацию об обратной трассировке под Windows из кода C (не C ++).
Я создаю кроссплатформенную библиотеку C со ссылкой - подсчет управления памятью. Он также имеет встроенный отладчик памяти, который предоставляет информацию об ошибках памяти ( XEOS C Foundation Library ).
Когда возникает ошибка, запускается отладчик, предоставляющий информацию об ошибке и соответствующей записи памяти .
В 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
.