如何从gdb命令提示符执行外部命令?

如何从gdb命令提示符执行外部命令?,gdb,Gdb,我正在用gdb调试一个程序。每当我错过一个断点或决定添加另一个观察点时,我必须终止进程并重新运行它。为了将现有的gdb附加到它,我使用attach。然而,我必须找出新流程的pid 今天我这样做的方式是挂起gdb,使用ps-C获取pid,然后返回gdb附加到它 有没有办法在不退出shell的情况下从gdb命令提示符运行unix命令,这样我就可以在gdb内部执行类似的操作: attach `ps -C <program_name>` 附加`ps-C` 我在linux上工作 (gdb)

我正在用gdb调试一个程序。每当我错过一个断点或决定添加另一个观察点时,我必须终止进程并重新运行它。为了将现有的gdb附加到它,我使用
attach
。然而,我必须找出新流程的pid

今天我这样做的方式是挂起gdb,使用ps-C获取pid,然后返回gdb附加到它

有没有办法在不退出shell的情况下从gdb命令提示符运行unix命令,这样我就可以在gdb内部执行类似的操作:

attach `ps -C <program_name>`
附加`ps-C`
我在linux上工作

(gdb)帮助shell
执行其余的命令 该行作为shell命令。没有 参数,运行一个低级shell


完成后,您可以使用“退出”返回gdb。

您只需使用
shell
,后跟要执行的命令,例如:

gdb$ shell

shell$ execute_your_commands 

shell$ exit

gdb$ you_have_returned_back_to_gdb_prompt
gdb$ shell g++ tsort.c -o tsort

这只是上一个答案的一个简短形式。

为了扩展已接受的答案,
shell
的快捷方式是

(gdb)救命

将行的其余部分作为shell命令执行。没有争论,, 下等炮弹


在这种模式下,当存在内核转储时,gdb似乎无法拾取或报告问题。有没有一种方法可以在gdb命令中使用shell命令的输出而不进行复制?attach shell ps-C似乎对我不起作用,所以我只能执行shell ps-C attach,但如果有更好的选择,那就太好了。在我的情况下,我需要shell to ssh命令来获取内核模块的.text地址,这样我就可以告诉本地gdb加载该地址的符号,能够获取脚本的结果并将其作为gdb命令运行将使这一过程变得非常简单。2021年,寻找相同的结果。如果我能在“define”中显示shell命令的输出,我会非常高兴。