我想调用backtrace函数来获取callchain,以下是我的代码,这段代码在x86上运行良好,但不能在mips上工作
mips-linux-gnu-gcc -o hello hello.c -g -rdynamic -O0 -Wall -msoft-float -EL
./hello
size = 1
0x400a04 : ./hello(foo+0x24) [0x400a04]
但是在mips上,只是得到了最后一帧,如何修复它?
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <execinfo.h>
#define BACKTRACE_SIZ 100
int i = 0;
void foo(void)
{
void *array[BACKTRACE_SIZ];
size_t size, i;
char **strings;
size = backtrace(array, BACKTRACE_SIZ);
strings = backtrace_symbols(array, size);
printf("size = %ld\n", (long)size);
for (i = 0; i < size; ++i) {
printf("%p : %s\n", array[i], strings[i]);
}
free(strings);
while (1) {
i++;
}
}
void b(void)
{
foo();
}
void a(void)
{
b();
}
int main(int argc, char **argv)
{
a();
return 0;
}
无法获得b和a和main。但是我可以在gdb中得到完整的callchain,为什么不能通过backtrace函数得到它? 我的工具链是codesourcery mips-2016.05,libc版本是2.23
mips-linux-gnu-gcc -o hello hello.c -g -rdynamic -O0 -Wall -msoft-float -EL -fomit-frame-pointer
mips-linux-gnu-gcc -o hello hello.c -g -rdynamic -O0 -Wall -msoft-float -EL -fno-omit-frame-pointer
我试过-fno-omit-frame-pointer和-fomit-frame-pointer,这两个选项都无法正常工作。
index_a
我尝试了我的扶手板,更糟糕的是,手臂上的尺寸为0