是否可以管道GDB命令?

时间:2016-06-25 13:06:54

标签: gdb

GDB中是否有一种方法可以级联两个命令,例如管道un UNIX? 我试图管道,但它没有用。

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

  x/x 0xbfffefd4

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

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

  x/x 0xbffff1dc

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

像x / x(x / x 0xbfffefd4)?

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

(gdb) print (char *) 0xADDR

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

旧学校方法是使用记录和shell的组合。您要做的是使用set logging及其子命令将输出写入文件。然后使用shell将此文件重写为新的gdb脚本。最后,source生成的文件执行您想要的命令。

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