- 论坛徽章:
- 1
|
本帖最后由 wuchengyang 于 2012-10-25 19:36 编辑
现在在一工程里用了-O2选项进行编译,当程序crash后,我想记录下来出错的程序CALL STACK,程序如下(64位):
struct stack_context_s {
uint8_t *bp;
uint8_t* pc;
};
void dump_stack(uint8_t* rbp, uint8_t* pc)
{
int32_t max_stack = 0;
struct stack_context_s szStackContext[10] = {0};
while (max_stack < 10) {
if (!rbp)
break;
szStackContext[max_stack].pc = *((uint8_t**)rbp+ );
szStackContext[max_stack].rbp = *((uint8_t**)rbp);
max_stack--;
}
}
但是,后来发现rbp寄存器记录的数据不对,在网上查了一下,说是GCC 优化后部在使用rbp寄存器。请问下各位大神,这样的话,我要记录调用栈,该怎么弄?多谢了。 |
|