DbgHelp教程2——栈回溯

调试的时候经常用到栈回溯来定位问题。获得栈回溯并不难,直接通过CaptureStackBackTrace这个API就可以获得。另外可以可以通过DbgHelp库里面的StackWalk64函数获得。

用CaptureStackBackTrace获取调用栈很简单:

StackWalk64的方法稍微复杂一点,首先要获得CONTEXT。获取CONTEXT有两种办法,一是通过内联汇编获取:

另外一种是调用RtlCaptureContext获取:

获取到CONTEXT之后就用StackWalk64遍历调用栈:

我们获得的调用栈都只是一些栈帧地址,如果要知道明确的函数名,还需要把地址翻译成符号名,封了一个PrintCallStackBackTrace,就是把栈帧地址翻译成可读的符号地址:

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注