想要在GDB中打印部分字符串

时间:2014-06-27 09:53:38

标签: gdb

我正在编写一个GDB宏来分析核心并打印一个字符串。来自核心的字符串输出是“sp-4/0/2”。现在我需要只打印“sp”,排除其他人。我不知道如何在GDB中实现这一点。任何指针都会有很大的帮助。

提前致谢。

2 个答案:

答案 0 :(得分:0)

参见,argv [1]是“sp-4/0/2”

(gdb) p argv[1]
$4 = 0x7fffffffe3fa "sp-4/0/2"

这只是两个第一个字符:

(gdb) printf "%.2s\n", argv[1]
sp

或者

(gdb) printf "%c%c\n", argv[1][0],argv[1][1]
sp

答案 1 :(得分:0)

即使大小不是静态已知,以下替代方法也可以使用:

(gdb) p {char} argv[1]@2

即您可以将2替换为变量或寄存器值。当您在(例如)中添加断点时,此功能很有用write并且没有可用的调试符号:

(gdb) b -qualified write # only match write, don't do globbing
(gdb) cond 1 $rdi == 2 # only when writing to stderr
(gdb) command 1
bt
p {char} $rsi@$rdx # print (partial) buffer
cont

上面的方法在使用System V AMD64调用约定时有效,但是可以通过调整寄存器轻松地用于arm调用约定。