C中的堆栈跟踪功能

时间:2018-02-03 17:55:52

标签: c recursion stack-trace printstacktrace

我试图在C中编写一个标识堆栈顶部并确定第一个帧指针的函数。然后我有一个不同的函数,递归打印当前的堆栈帧,并使用下一个堆栈帧的指针调用自身。关于如何做到这一点的任何提示并开始使用?

itemsInList = [
    { id: 1, name: "Jonny" }
  , { id: 2, name: "Gustaf" }
  , { id: 3, name: "Jonas" }
];

listObj.filter(function(item) {
    return item.values().id > 1;
}); // Only items with id > 1 are shown in list

1 个答案:

答案 0 :(得分:0)

<stddef.h>

我就是这样做的,因为GNU var academic_master = {}; 不适用于TinyC。我认为我的功能也可以用于gcc / clang。这里的技巧是从存储在RBP中的地址开始(在x86_64上)并一直走到int backtrace(void **buffer, int size) { extern uint64_t *__libc_stack_end; uint64_t **p, *bp, *frame; asm ("mov %%rbp, %0;" : "=r" (bp)); p = (uint64_t**) bp; int i = 0; while (i < size) { frame = p[0]; if (frame < bp || frame > __libc_stack_end) { return i; } buffer[i++] = p[1]; p = (uint64_t**) frame; } return i; } 这是一个内置变量。