Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you start running the program over again in gdb with 'target remote'?

People also ask

How do I restart a GDB program?

If you want gdb to resume normal execution, type "continue" or "c". gdb will run until your program ends, your program crashes, or gdb encounters a breakpoint.

How do I use GDB remote?

To start remote debugging, run GDB on the host machine, and specify as an executable file the program that is running in the remote machine. This tells GDB how to find your program's symbols and the contents of its pure text. Note that the colon is still required here.

How do I start gdbserver on target?

To start "gdbserver" without supplying an initial command to run or process ID to attach, use the --multi command line option. In such case you should connect using "target extended-remote" to start the program you want to debug.

What command is used to start up GDB?

Use the run command to start your program under gdb. You must first specify the program name (except on VxWorks) with an argument to gdb (see Getting In and Out of gdb), or by using the file or exec-file command (see Commands to Specify Files).


You are looking for Multi-Process Mode for gdbserver and set remote exec-file filename


Unfortunately, I don't know of a way to restart the application and still maintain your session. A workaround is to set the PC back to the entry point of your program. You can do this by either calling:

jump function

or

set $pc=address.

If you munged the arguments to main you may need set them up again.

Edit:

There are a couple of caveats with the above method that could cause problems.

  • If you are in a multi-threaded program jumping to main will jump the current thread to main, all other threads remain. If the current thread held a lock...then you have some problems.
  • Memory leaks, if you program flow allocates some stuff during initialization then you just leaked a bunch of memory with the jump.
  • Open files will still remain open. If you mmap some files or an address, the call will most likely fail.

So, using jump isn't the same thing as restarting the program.


"jump _start" is the usual way.


Presumably you are running gdbserver on the embedded system.

You can ask it to restart your program instead of exiting with target extended-remote