NightFurry
NightFurry

Reputation: 358

How to get backtrace without core file?

In case core-dump is not generated(due to any possible reason). And I want to know back trace (execution sequence of instructions). How Can I do that?

As /proc/pid/maps stores the memory map of a process. Is there any file in linux which stores userspace or kernel space of a process?(May be I'm using wrong words to express)

I mean to say all address by address sequence of execution of instructions.

Upvotes: 0

Views: 713

Answers (2)

Alex D
Alex D

Reputation: 30445

To see what the kernel stack for a process looks like at the present time:

sudo cat /proc/PID/stack

If you want to see the user stack for a process, and can get to it while it is still running (even if it is stuck waiting for a system call to return), run gdb and attach to it using its PID. Then use the backtrace command. This will be much more informative if the program was compiled with debug symbols.

Upvotes: 3

Milind Dumbare
Milind Dumbare

Reputation: 3244

If you want backtrace to be printed in Linux kernel use dump_stack()

If you want backtrace to be printed in user-level C code, implement something like this

#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
}

And then compile the code with -funwind-tables flag and link with -rdynamic

As told in http://www.stlinux.com/devel/debug/backtrace

Upvotes: 2

Related Questions