【问题标题】:How can I execute external commands from the gdb command prompt?如何从 gdb 命令提示符执行外部命令?
【发布时间】:2010-11-28 15:35:58
【问题描述】:

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

我今天这样做的方法是暂停 gdb,使用ps -C <program_name> 获取 pid,然后返回 gdb 以附加到它。

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

attach `ps -C <program_name>`

我正在研究 linux。

【问题讨论】:

    标签: gdb


    【解决方案1】:

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

    完成后,你可以使用'exit'返回gdb。

    【讨论】:

    • 有没有办法在 gdb 命令中使用 shell 命令的输出而不进行复制? attach shell ps -C 似乎对我不起作用,所以我只能做 shell ps -C attach 但如果有更好的选择那就太好了
    • 在我的情况下,我需要使用 ssh 命令来获取内核模块的 .text 地址,以便我可以告诉本地 gdb 为该地址加载符号,从而能够获取结果一个脚本并将其作为 gdb 命令运行将使这非常容易。
    • 2021 并寻找相同的。如果我可以显示在“定义”中调用的 shell 命令的输出,我会很高兴。
    【解决方案2】:
    gdb$ shell
    
    shell$ execute_your_commands 
    
    shell$ exit
    
    gdb$ you_have_returned_back_to_gdb_prompt
    

    【讨论】:

      【解决方案3】:

      你可以只使用shell 后面跟着你要执行的命令,例如:

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

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

      【讨论】:

      • 在这种模式下,当出现核心转储时,gdb 似乎无法启动或无法报告问题。
      【解决方案4】:

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

      (gdb) 帮助!

      将该行的其余部分作为 shell 命令执行。没有争论, 运行一个劣质的 shell。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-18
        • 1970-01-01
        • 1970-01-01
        • 2017-09-18
        • 1970-01-01
        • 2020-11-24
        • 2011-10-26
        • 1970-01-01
        相关资源
        最近更新 更多