如何在没有核心文件的情况下获得回溯?

时间:2015-03-05 09:25:58

标签: debugging memory linux-kernel

如果未生成核心转储(由于任何可能的原因)。我想知道回溯(指令的执行顺序)。我怎么能这样做?

as / proc / pid / maps存储进程的内存映射。 linux中是否有存储进程的用户空间或内核空间的文件?(可能是我用错误的词来表达)

我的意思是按地址执行指令说明所有地址。

2 个答案:

答案 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

链接

正如http://www.stlinux.com/devel/debug/backtrace

所述