GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Kann ich GDB verwenden, um einen laufenden Prozess zu debuggen?

Sie können mit gdb -p PID an einen laufenden Prozess anhängen .


Ja. Verwenden Sie die attach Befehl. Unter diesem Link finden Sie weitere Informationen. Geben Sie help attach ein an einer GDB-Konsole ergibt folgendes:

(gdb) help attach

An einen Prozess oder eine Datei außerhalb von GDB anhängen. Dieser Befehl wird an ein anderes Ziel angehängt, vom gleichen Typ wie Ihr letzter"target " Befehl ("info files " zeigt Ihren Zielstapel). Der Befehl kann als Argument eine Prozess-ID, einen Prozessnamen (mit einer optionalen Prozess-ID als Suffix) oder eine Gerätedatei annehmen. Für eine Prozess-ID müssen Sie die Berechtigung haben, die zu senden ein Signal verarbeiten, und es muss die gleiche effektive UID wie der Debugger haben. Bei Verwendung von "attach " zu einem bestehenden Prozess hinzufügt, findet der Debugger das im Prozess laufende Programm, indem er zuerst im aktuellen Arbeitsverzeichnis sucht oder (falls dort nicht gefunden) den Quelldatei-Suchpfad verwendet (siehe "directory " Befehl). Sie können auch den Befehl "file " Befehl, um das Programm zu spezifizieren und seine Symboltabelle zu laden.

HINWEIS:Aufgrund der verbesserten Sicherheit im Linux-Kernel können Sie Schwierigkeiten beim Anhängen an einen Prozess haben - zum Beispiel beim Anhängen an das untergeordnete Element einer Shell von einer anderen.

Wahrscheinlich müssen Sie /proc/sys/kernel/yama/ptrace_scope einstellen je nach Ihren Anforderungen. Viele Systeme verwenden jetzt standardmäßig 1 oder höher.

The sysctl settings (writable only with CAP_SYS_PTRACE) are:

0 - classic ptrace permissions: a process can PTRACE_ATTACH to any other
    process running under the same uid, as long as it is dumpable (i.e.
    did not transition uids, start privileged, or have called
    prctl(PR_SET_DUMPABLE...) already). Similarly, PTRACE_TRACEME is
    unchanged.

1 - restricted ptrace: a process must have a predefined relationship
    with the inferior it wants to call PTRACE_ATTACH on. By default,
    this relationship is that of only its descendants when the above
    classic criteria is also met. To change the relationship, an
    inferior can call prctl(PR_SET_PTRACER, debugger, ...) to declare
    an allowed debugger PID to call PTRACE_ATTACH on the inferior.
    Using PTRACE_TRACEME is unchanged.

2 - admin-only attach: only processes with CAP_SYS_PTRACE may use ptrace
    with PTRACE_ATTACH, or through children calling PTRACE_TRACEME.

3 - no attach: no processes may use ptrace with PTRACE_ATTACH nor via
    PTRACE_TRACEME. Once set, this sysctl value cannot be changed.

Ja. Sie können Folgendes tun:

gdb program_name program_pid

Eine Abkürzung wäre (vorausgesetzt, nur eine Instanz läuft):

gdb program_name `pidof program_name`

Linux
  1. Umgebung eines laufenden Prozesses ändern?

  2. Können Sie Anker ^ $ mit Ls verwenden?

  3. Kann GDB den Assemblercode eines laufenden Programms ändern?

  4. Kann die Thread-ID eines Multithread-Prozesses mit der Prozess-ID eines anderen laufenden Prozesses identisch sein?

  5. Können wir C-Code in Python verwenden?

So listen Sie laufende Prozesse in Linux auf

So verwenden Sie GDB zum Debuggen von Programmen in Ubuntu 20.04

Laufende Prozesse

Wie kann ich eine Dump-Datei eines laufenden Prozesses in Linux erstellen?

Kann ich APT auf TinyCore verwenden?

Bestimmen Sie, in welcher Gruppe(n) sich ein laufender Prozess befindet?