34

当您在同一台计算机上对可执行文件执行常规 gdb 会话时,您可以发出 run 命令,它将重新启动程序。

当您在嵌入式系统上运行 gdb 时,与 command 一样target localhost:3210,如何在不退出并重新启动 gdb 会话的情况下重新启动程序?

4

9 回答 9

13

您正在寻找gdbserver 的多进程模式set remote exec-file filename

于 2011-03-05T00:09:54.203 回答
10

不幸的是,我不知道如何重新启动应用程序并仍然保持您的会话。一种解决方法是将 PC 设置回程序的入口点。您可以通过以下任一方式调用:

jump function

或者

set $pc=address.

如果您将论点转换为main您可能需要再次设置它们。

编辑:

上述方法有几个注意事项可能会导致问题。

  • 如果您在一个多线程程序中跳转到 main 将当前线程跳转到 main,所有其他线程仍然存在。如果当前线程持有锁......那么你有一些问题。
  • 内存泄漏,如果您的程序流在初始化期间分配了一些东西,那么您只是在跳转时泄漏了一堆内存。
  • 打开的文件仍将保持打开状态。如果你映射一些文件或地址,调用很可能会失败。

因此,使用跳转与重新启动程序不同。

于 2008-09-16T20:35:47.367 回答
4

大概您正在嵌入式系统上运行 gdbserver。

您可以要求它重新启动程序,而不是使用目标扩展远程退出

于 2008-12-06T06:43:15.913 回答
4

“跳转_start”是通常的方式。

于 2009-10-28T21:05:29.933 回答
3

分步程序

偏僻的:

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

当地的:

# 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

在 Ubuntu 14.04 中测试。

也可以将 CLI 参数传递给程序:

gdbserver --multi :1234 ./myexec arg1 arg2

并且该./myexec部分消除了对 的需要set remote exec-file ./myexec,但这有以下烦恼:

传递环境变量和更改工作目录而不重新启动:如何在不重新启动的情况下修改 gdbserver --multi 的环境变量和工作目录?

于 2017-05-24T14:35:42.490 回答
2

如果您正在运行常规 gdb,您可以键入“run”快捷方式“r”,gdb 会询问您是否要重新启动程序

于 2016-03-13T03:31:48.890 回答
2

对我来说,21.2 示例 GDB 会话启动中描述的方法效果很好。当我稍后在“(gdb)”提示符处输入时,目标硬件已重置,我可以使用(=继续)monitor reset halt重新启动应用程序。c

在运行之间可以省略该load命令,因为不需要一次又一次地刷新程序。

于 2017-03-15T15:08:16.177 回答
1

您可以使用jumpgdb 命令。为此,您可以检查您的startup脚本。我startup script有一个符号。

    .section  .text.Reset_Handler
  .weak  Reset_Handler
  .type  Reset_Handler, %function
Reset_Handler:  
   ldr   r0, =_estack
   mov   sp, r0          /* set stack pointer */

我想跳起来开始。这就是我使用的原因:

jump Reset_Handler
于 2021-06-10T16:13:18.847 回答
0

在 EFM32 Happy Gecko 上,没有任何建议对我有用,所以这是我从有关将 GDB 集成到 Eclipse 环境的文档中学到的内容。

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

这使我处于从 IDE 重置时所期望的状态。

于 2017-06-27T17:10:50.063 回答