如果未生成核心转储(由于任何可能的原因)。我想知道回溯(指令的执行顺序)。我怎么能这样做?
as / proc / pid / maps存储进程的内存映射。 linux中是否有存储进程的用户空间或内核空间的文件?(可能是我用错误的词来表达)
我的意思是按地址执行指令说明所有地址。
答案 0 :(得分:3)
要查看当前进程的内核堆栈是什么样的:
sudo cat /proc/PID/stack
如果要查看进程的用户堆栈,并且可以在进程仍在运行时(即使它等待系统调用返回),请运行gdb
并附加到该进程使用它的PID。然后使用backtrace
命令。如果使用调试符号编译程序,这将提供更多信息。
答案 1 :(得分:2)
如果要在Linux内核中打印回溯,请使用dump_stack()
如果您希望在用户级C代码中打印回溯,请实现类似
的内容#include <stdlib.h>
#include <stdio.h>
#include <execinfo.h>
#define BACKTRACE_SIZ 64
void show_backtrace (void)
{
void *array[BACKTRACE_SIZ];
size_t size, i;
char **strings;
size = backtrace(array, BACKTRACE_SIZ);
strings = backtrace_symbols(array, size);
for (i = 0; i < size; i++) {
printf("%p : %s\n", array[i], strings[i]);
}
free(strings); // malloced by backtrace_symbols
}
然后使用-funwind-tables
标记编译代码并与-rdynamic