Starten Sie die Ausführung von Anfang an, ohne neu laden zu müssen

Ich verwende GDB, um meine ausführbare Datei zu laden und zu debuggen. Im Moment muss ich jedes Mal, wenn ich mein Programm ausführen möchte load, es zuerst ausführen und dann continuedie Ausführung starten.

Anscheinend runbeginnt der Befehl die Ausführung von Anfang an, aber wenn ich es versuche, runerhalte ich den Fehler:

The "remote" target does not support "run".  Try "help target" or "continue".

Mein Board ist ein STM32F2. Gibt es eine Möglichkeit, die Ausführung einfach vom Start der ausführbaren Datei zu starten, ohne das verdammte Ding erneut in den Speicher laden zu müssen?

BEARBEITEN : Ich habe Leos Vorschlag ausprobiert, aber wenn ich das tue, runerhalte ich die folgende Fehlermeldung:

(gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n) [answered Y; input not from terminal]
../../gdb-7.2/gdb/thread.c:79: internal-error: inferior_thread: Assertion `tp' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n) [answered Y; input not from terminal]
../../gdb-7.2/gdb/thread.c:79: internal-error: inferior_thread: Assertion `tp' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Create a core file of GDB? (y or n) [answered Y; input not from terminal]

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

Antworten (3)

Werfen Sie einen Blick auf https://stackoverflow.com/a/5200638/713554 , das wiederum auf http://sourceware.org/gdb/onlinedocs/gdb/Server.html verweist

Soweit ich weiß, sollten Sie anstelle target extended-remotevon target remote.

Danke. Ich habe das versucht, aber ich bekomme eine Fehlermeldung. (Bitte sehen Sie sich die bearbeitete Frage für den Fehler an.)

Schritt-für-Schritt-Verfahren

Fernbedienung:

# 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
(gdb) r
[Inferior 1 (process 1234) exited normally]
(gdb) r
[Inferior 1 (process 1235) exited normally]
(gdb) monitor exit

Stdout wird auf der Fernbedienung angezeigt.

Getestet unter Ubuntu 14.04.

Verwandte: https://stackoverflow.com/questions/75255/how-do-you-start-running-the-program-over-again-in-gdb-with-target-remote

Für vollständig eingebettete Plattformen ohne dedizierten Loader ist ein Neustart am Einstiegspunkt ausreichend – der Startcode löscht BSS, kopiert die initialisierten Daten, setzt den anfänglichen Stapelzeiger und ruft globale Konstruktoren (falls vorhanden) auf.

Für alles, was einen ausführbaren Loader verwendet, müssen Sie diesen Loader durchlaufen.