我目前正在寻找一种在Windows下从C代码(无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 )( …Run Code Online (Sandbox Code Playgroud) 所有,
我看到一个应用程序,一个SVN Visual Studio插件,当它崩溃时显示了一个漂亮的可读堆栈跟踪.
我很乐意将其添加到我的应用程序中.我该如何提供?没有电子邮件的信息,只需一个视觉显示就足够了.
我想在main中对当前堆栈进行校验和,以检查它是否在两点之间被改变.
例如:
int main(void) {
...
stack_checksum();
... process ...
if(stack_checksum() != ...)
altered.
}
Run Code Online (Sandbox Code Playgroud)
如何获取基本堆栈地址和堆栈顶部的当前地址?
编辑: 随着@MiroslavBajtoš帮助,步骤方法: