关于嵌入式:您如何使用“目标远程”在gdb中重新开始运行该程序?

关于嵌入式:您如何使用“目标远程”在gdb中重新开始运行该程序?

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

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

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


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


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

jump function

要么

set $pc=address

如果您修改了main的参数,则可能需要再次设置它们。

编辑:

上述方法有两个警告,可能会引起问题。

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

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


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

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


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

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


"跳转_开始"是通常的方法。


分步程序

远程:

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

本地:

1
2
3
4
5
6
7
8
9
# 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参数传递给程序:

1
gdbserver --multi :1234 ./myexec arg1 arg2

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

  • 未记录:https://sourceware.org/bugzilla/show_bug.cgi?id=21981
  • 不会显示在show args上,并且不会在重新启动后持续存在:https://sourceware.org/bugzilla/show_bug.cgi?id=21980

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


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

1
2
3
(gdb) mon reset 0
(gdb) continue
(gdb) continue

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


如果您运行的是常规gdb,则可以键入"运行"快捷方式" r",gdb会询问您是否要重新启动该程序


推荐阅读

    linux监控cpu命令?

    linux监控cpu命令?,情况,系统,信息,状态,时间,实时,电脑,工具,命令,百分比,li

    linux密码更改命令?

    linux密码更改命令?,密码,系统,名称,信息,环境,命令,使用者,用户,权限,终端,L

    linux硬盘挂载命令?

    linux硬盘挂载命令?,系统,设备,信息,电脑,情况,状态,管理,数据,工具,命令,lin

    linux命令替换的字符?

    linux命令替换的字符?,命令,数据,系统,商业,字符串,文件,内容,方法,批量,字

    linux命令行大全如何?

    linux命令行大全如何?,地址,命令,基础,工作,管理,单位,数据,标准,目录,文件,l

    linux开启bnc命令?

    linux开启bnc命令?,网络,工作,酒店,电脑,光线,信息,位置,网卡,中心,价格,寝室

    图形化linux命令集?

    图形化linux命令集?,系统,工作,密码,信息,软件,地址,命令,状态,工具,电脑,lin

    linux命令行打开浏览?

    linux命令行打开浏览?,系统,网络,网址,工具,密码,首页,服务,网站,数据,地址,l

    linux使用ssh命令?

    linux使用ssh命令?,服务,系统,软件,在线,认证,地址,命令,协议,虚拟机,主机,ss

    linux系统查版本命令?

    linux系统查版本命令?,系统,信息,名称,状态,设备,命令,软件,工具,版本,终端,l

    linux的安装软件命令?

    linux的安装软件命令?,软件,系统,名称,发行,官方网站,市场,官网,密码,网站,

    linux开启命令行命令?

    linux开启命令行命令?,系统,单位,工具,电脑,首页,终端,情况,密码,权威,命令,l

    rmlinux命令详解?

    rmlinux命令详解?,系统,命令,名称,工作,文件,目录,文件夹,环境,档案,不了,Lin

    linux操作命令重命名?

    linux操作命令重命名?,图片,软件,名称,名字,文件,命令,状态,代码,工具,系统,L

    linux快速写入命令?

    linux快速写入命令?,地址,命令,生产,资料,数据,单位,文件,文本,控制台,字符

    强大系统linux命令?

    强大系统linux命令?,系统,工作,地址,信息,命令,管理,名称,位置,目录,控制台,l

    linux怎么返回命令?

    linux怎么返回命令?,暂停,电脑,系统,一致,状态,密码,地址,服务,命令,空格,在L

    linux命令自动填充?

    linux命令自动填充?,培训,企业,教育,实战,基础,技术,项目,服务,环境,发展,哪

    linux日历的命令是?

    linux日历的命令是?,系统,时间,工作,情况,命令,管理,信息,大陆,国家,电脑,基

    linux满屏显示命令?

    linux满屏显示命令?,工具,系统,服务,电脑,网络,技术,信息,数据,上会,软件,如