如何获取 gdb 调用命令识别函数返回中的新行



>我有以下内容:

$ cat 1.c
#include <stdio.h>
static char buf[1000];
const char*
foo(void)
{
memcpy(buf, "abc", 3);
buf[3] = 'n';
memcpy(buf+ 4, "def", 3);
buf[7] = 'n';
buf[8] = 0;
return buf;
}
int main()
{
foo();
printf("%s", buf);
return 0;
}

我编译它:gcc -g -O0 1.c并启动 gdb:gdb ./a.out

我在"printf"行设置断点,然后发出调用命令:

(gdb) call foo()
$4 = 0x600980 "abcndefn"

您可以看到没有选取换行符字符。

我正在使用这个技巧来解决它:

(gdb) call printf("%s", foo())
abc
def
$5 = 8

它有效,但有点麻烦。我想知道是否有更简洁的方法?

如果调用 printf 是这里最好的解决方案,有没有办法告诉 gdb 不要显示"$5 = 8"?

您可以看到没有选取换行符字符。

相反,您可以在缓冲区中看到两个换行符(如预期的那样)——这就是n的意思。

我想知道是否有更简洁的方法?

简洁的方式是GDB已经实现的。你似乎想要冗长的方式。尝试:

(gdb) printf "%s", foo()

(注意:这与你已经尝试过的call printf非常不同。

最新更新