В настоящее время я ищу способ получить обратную информацию в Windows, начиная с кода C (без С++).
Я создаю кросс-платформенную библиотеку C с управлением памятью с подсчетом ссылок. Он также имеет встроенный отладчик памяти, который предоставляет информацию о ошибках памяти (XEOS C Foundation Library).
При возникновении ошибки отладчик запускается, предоставляя информацию о сбое и записи в памяти.
В Linux или Mac OS X я могу искать execinfo.h
, чтобы использовать функцию backtrace
, поэтому я могу отображать дополнительную информацию об ошибке памяти.
Я ищу то же самое в Windows.
Я видел Как можно захватить трассировку стека в C? в Stack Overflow. Я не хочу использовать стороннюю библиотеку, поэтому функции CaptureStackBackTrace
или StackWalk
выглядят хорошо.
Единственная проблема заключается в том, что я просто не понимаю, как их использовать, даже с документацией Microsoft.
Я не привык к программированию Windows, поскольку я обычно работаю над совместимыми с POSIX системами.
Каковы некоторые объяснения этих функций и, возможно, некоторые примеры?
ИЗМЕНИТЬ
Теперь я рассматриваю возможность использования функции 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
.