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 continue
die Ausführung starten.
Anscheinend run
beginnt der Befehl die Ausführung von Anfang an, aber wenn ich es versuche, run
erhalte 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, run
erhalte 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.
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-remote
von target remote
.
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.
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.
Zufallsblau