Frage

Wenn Sie eine übliche GDB-Sitzung auf einer ausführbare Datei auf demselben Computer zu tun, können Sie den Startbefehl erteilen, und es wird das Programm wieder von vorn beginnen.

Wenn Sie GDB auf einem Embedded-System laufen lassen, wie mit dem Befehl Ziellocalhost: 3210' , wie Sie das Programm wieder von vorne anfangen können, ohne Aufhören und gdb-Sitzung neu zu starten

War es hilfreich?

Andere Tipps

Leider weiß ich nicht eine Möglichkeit, die Anwendung neu starten und nach wie vor der Sitzung zu erhalten. Eine Abhilfe ist, den PC zurück zum Einstiegspunkt des Programms einzustellen. Sie können entweder telefonisch dies tun:

jump function

oder

set $pc=address.

Wenn Sie die Argumente munged main können Sie sie wieder einstellen müssen.

Edit:

Es gibt ein paar Einschränkungen mit dem obigen Verfahren, die Probleme verursachen könnten.

  • Wenn Sie in einem Multi-Threaded-Programm zur Hauptspringen springt bleiben, um den aktuellen Thread Haupt, alle anderen Threads. Wenn der aktuelle Thread eine Sperre gehalten ... dann haben Sie einige Probleme.
  • Speicherlecks, wenn Sie Flow-Programm einige Sachen bei der Initialisierung ordnet dann durchgesickert Sie nur ein paar Speicher mit dem Sprung.
  • Öffnen von Dateien werden immer noch offen bleiben. Wenn Sie einige Dateien oder eine Adresse mmap, wird der Anruf höchstwahrscheinlich fehlschlagen.

Also, springen verwendet, ist nicht dasselbe wie das Programm neu zu starten.

Vermutlich sind Sie mit gdbserver auf dem Embedded-System.

Sie können es fragen Sie Ihr Programm neu zu starten, anstatt mit target extended-Fern

"jump _start" ist der üblicher Weg.

Für mich das beschriebene Verfahren in 21,2 probieren Sie GDB Sitzungsstart funktioniert gut. Als ich monitor reset halt später an der Eingabe „(GDB)“ fordert die Ziel-Hardware-Reset ist, und ich kann die Anwendung mit c (= continue) neu starten.

Der load Befehl kann zwischen den Läufen weggelassen werden, da es nicht notwendig ist, das Programm immer wieder zu blinken.

Schritt-für-Schritt-Verfahren

Remote:

# pwd contains cross-compiled ./myexec
gdbserver --multi :1234

Lokal:

# pwd also contains the same cross-compiled ./myexec
gdb -ex 'target extended-remote 192.168.0.1:1234' \
    -ex 'set remote exec-file ./myexec' \
    --args ./myexec arg1 arg2
(gdb) r
[Inferior 1 (process 1234) exited normally]
(gdb) r
[Inferior 1 (process 1235) exited normally]
(gdb) monitor exit

Getestet in Ubuntu 14.04.

Es ist auch möglich, CLI Argumente an das Programm zu übergeben, wie:

gdbserver --multi :1234 ./myexec arg1 arg2

und der ./myexec Teil beseitigt die Notwendigkeit für set remote exec-file ./myexec, aber dies hat folgende Belästigungen:

Pass Umgebungsvariablen und ändern, ohne Neustart Arbeitsverzeichnis: Wie die Umgebungsvariablen und das Arbeitsverzeichnis von gdbserver --multi zu ändern, ohne es neu zu starten?

Wenn Sie regelmäßig gdb ausgeführt wird, können Sie ‚run‘ Abkürzung ‚r‘ und GDB geben Sie fragt, ob Sie das Programm neu zu starten

Auf EFM32 Happy Gecko keiner der Vorschläge für mich funktionieren würde, hier so ist, was ich aus der Dokumentation GDB gelernt haben, in die Eclipse-Umgebung zu integrieren.

(gdb) mon reset 0
(gdb) continue
(gdb) continue

Das bringt mich in dem Zustand, dass ich erwartet hätte, wenn zurückgesetzt von dem IDE zu treffen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top