Woher weiß ich, welche Funktion ein Aufruf von Systemanrufen ist?
-
27-10-2019 - |
Frage
Ich benutze Strace, um meine App zu verfolgen und finde, dass sie bei einem System -Aufruf "Umfrage" blockiert ist. Ich möchte herausfinden, welche Funktion diesen Systemaufruf aufruft.
Lösung
Haben Sie Ihr Programm mit Debugging -Informationen zusammengestellt (die -g
Flagge für GCC)? Starten Sie Ihren Debugger und holen Sie sich eine Stapelspur!
Beispielprogramm (Beispiel.C):
#include <poll.h>
void f2(void)
{
struct pollfd fd = {0, POLLERR, POLLERR};
poll(&fd, 1, -1);
}
void f1(void)
{
f2();
}
int main(int argc, char **argv[])
{
f1();
return 0;
}
Beispiel Build & Backtrace:
$ CFLAGS=-g make example
cc -g example.c -o example
$ gdb example
(gdb) run
Starting program: example
Reading symbols for shared libraries +. done
^C
Program received signal SIGINT, Interrupt.
0x00007fff821751a6 in poll ()
(gdb) bt
#0 0x00007fff821751a6 in poll ()
#1 0x0000000100000ea6 in f2 () at example.c:6
#2 0x0000000100000eb1 in f1 () at example.c:11
#3 0x0000000100000ec7 in main (argc=1, argv=0x7fff5fbff750) at example.c:16
(gdb)
Andere Tipps
Tipp einfach:
gstack
PID
Um eine Stapelverfolgung Ihres Programms mit der angegebenen Prozess -ID zu erhalten.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow