【问题标题】:Is it possible to pipe GDB commands?是否可以通过管道传输 GDB 命令?
【发布时间】:2016-10-27 23:37:51
【问题描述】:

GDB 中有没有一种方法可以级联两个命令,比如 UNIX 下的管道? 我尝试过管道,但没有成功。

如果我想查看存储在 0xbffefd4 地址的内容,我输入:

  x/x 0xbfffefd4

在我的示例中它给了我 0xbffff1dc

如果现在我想查看存储在 0xbffff1dc 的内容,我必须输入:

  x/x 0xbffff1dc

有没有办法管这两个命令?

类似 x/x (x/x 0xbffffefd4) 的东西?

顺便问一下,有没有办法显示字符而不是十六进制?

【问题讨论】:

    标签: gdb


    【解决方案1】:

    可以通过几种方式编写 gdb 命令,但这并不容易。

    在特定的间接情况下,您可以只使用 C 运算符。那就是:

    (gdb) x/x *(void**)0xbfffefd4
    

    顺便问一下,有没有办法显示字符而不是十六进制?

    参见help x -- 它说/c 格式显示字符。另一种方法是将指针转换为char *,gdb 会将其打印为字符串:

    (gdb) print (char *) 0xADDR
    

    对于更一般的命令组合(相对于表达式,后者更容易处理),有两种方法。两者都很痛苦。

    老式方法是结合使用日志记录和shell。您所做的是使用set logging 及其子命令将输出写入文件。然后使用shell 将此文件重写为新的gdb 脚本。最后source生成的文件执行你想要的命令。

    新的学校方法是用 Python 编写一个自定义命令来执行您想要的操作。如果这是您真正想要的,您可能可以编写一个通用的组合命令。

    【讨论】:

      猜你喜欢
      • 2017-10-12
      • 1970-01-01
      • 2014-08-17
      • 2014-12-01
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-18
      相关资源
      最近更新 更多