Tag: stack trace

适用于Android的Stacktrace for C

我的Android应用程序中有C代码,想要抓住崩溃并将它们打印到日志文件中。 我看到这篇文章 ,并试过,但我找不到execinfo lib。 我正在使用Ubuntu 11.10并使用NDK编译到Android。 有谁知道如何为NDK / ARM找到execinfo lib,或者有另一个简单的解决方案?

使用回调函数来报告堆栈回溯

假设我有以下内容: typedef struct { char *name; char binding; int address; } Fn_Symbol //definition of function symbol static Fn_Symbol *fnSymbols; //array of function symbols in a file statc int total; //number of symbol functions in the array and file static void PrintBacktrace(int sigum, siginfo_t * siginfo, void *context) { printf(“\nSignal received %d (%s)\n”, signum, strsignal(signum)); const […]

如何充分利用堆栈跟踪(来自内核或核心转储)?

如果你的内核模块崩溃很幸运,你会得到一个带有大量信息的日志,例如寄存器中的值等。一个这样的信息是堆栈跟踪(核心转储也是如此,但我最初问这个内核模块)。 举个例子: [] ? skink_free_devices+0x32/0xb0 [skin_kernel] [] ? cleanup_module+0x1e5/0x550 [skin_kernel] [] ? __stop_machine+0x57/0x70 [] ? __try_stop_module+0x0/0x30 [] ? sys_delete_module+0x149/0x210 [] ? sysenter_do_call+0x12/0x16 我的猜测是+/与发生错误的函数的偏移量有关。 也就是说,通过检查这个数字,或许可以查看汇编输出,我应该能够找到发生此错误的行(更好的是,指令)。 那是对的吗? 我的问题是,这两个数字究竟是什么? 你如何利用它们?

如何将函数地址映射到* .so文件中

backtrace函数给出一组回溯如何用函数名/文件名/行号映射它? for ex:- backtrace() returned 8 addresses ./libtst.so(myfunc5+0x2b) [0xb7767767] ./libtst.so(fun4+0x4a) [0xb7767831] ./libtst.so(fun3+0x48) [0xb776787f] ./libtst.so(fun2+0x35) [0xb77678ba] ./libtst.so(fun1+0x35) [0xb77678f5] ./a.out() [0x80485b9] /lib/libc.so.6(__libc_start_main+0xe5) [0xb75e9be5] ./a.out() [0x80484f1] 从上面的堆栈我怎样才能获得文件名和行号? 我做了以下事情,但没有运气。 如果我错了,请纠正我:) for ex:- ./libtst.so(fun2+0x35) [0xb77dc887] 0xb77dc887(fun2 addr+offset)-0xb77b6000 (lib starting addr) = 0x26887 (result) result is no way related to function in nm output. I used addr2line command:- addr2line -f -e […]