当您在同一台计算机上的可执行文件上执行通常的gdb会话时,可以给出运行命令,它将再次启动该程序。你如何开始在gdb中使用'target remote'重新运行程序?
当您在嵌入式系统上运行gdb时,与命令target localhost:3210'一样,如何在不退出并重新启动gdb会话的情况下重新启动程序?
当您在同一台计算机上的可执行文件上执行通常的gdb会话时,可以给出运行命令,它将再次启动该程序。你如何开始在gdb中使用'target remote'重新运行程序?
当您在嵌入式系统上运行gdb时,与命令target localhost:3210'一样,如何在不退出并重新启动gdb会话的情况下重新启动程序?
不幸的是,我不知道重新启动应用程序并仍然保持会话的方法。解决方法是将PC设置回程序的入口点。您可以通过调用做到这一点:
jump function
或
set $pc=address
。
如果您将参数消减为main
,则可能需要重新设置它们。
编辑:
有几个与可能导致问题的上述方法需要注意的地方。
所以,使用跳转与重新启动程序不是一回事。
假设你在嵌入式系统上运行gdbserver。
你可以要求它重新启动,而不是与target extended-remote
有用,目前没有关于目标扩展模式。谢谢。 – sstock 2009-07-31 01:09:14
“跳_start”退出你的程序是通常的方式。
如果您正在运行规律GDB你可以键入“运行”快捷“R”和gdb询问您是否要重新启动的程序
对我的方法描述在21.2 Sample GDB session startup的作品很棒。当我在“(gdb)”提示后输入monitor reset halt
时,目标硬件将重置,我可以用c
(= continue)重新启动应用程序。
在运行之间可以省略load
命令,因为不需要一次又一次地刷新程序。
步骤一步过程
远程:
# 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
的需要,但这种有以下烦恼:
show args
上显示,并且在重新启动后不会持续显示:https://sourceware.org/bugzilla/show_bug.cgi?id=21980通行证环境变量和更改工作目录,而不重新启动:How to modify the environment variables and working directory of gdbserver --multi without restarting it?
在EFM32快乐壁虎没有任何的建议都为我工作,所以这里是我从文档上集成GDB到Eclipse环境中学会了。
(gdb) mon reset 0
(gdb) continue
(gdb) continue
这使我处于从IDE打到重置时的状态。
对于一个简单的非多线程应用程序,跳转正是我所需要的。 – wulfgarpro 2016-06-29 01:56:14