2

请参阅下面的回溯,我想我以前没有见过这个,我在文档中找不到任何信息:

(gdb) bt
#0  0x000000007b44042c in Driver::setRec (this=0x1, message=@0x50)
4

3 回答 3

2

我在文档中找不到它,但看起来这就是 gdb 显示对变量的引用的方式。根据回溯,您在类方法处停止,通过引用接受 1 个参数,并带有以下签名:Driver::setRec(message&).

更新:在C++ 表达式文档中
没有明确说明。唯一声明的是:@

在gdb显示一帧时显示的参数列表中,不显示参考变量的值(与其他变量不同);这避免了混乱,因为引用通常用于大型结构。引用变量的地址总是显示出来,除非你指定了`set print address off'。

于 2012-04-05T14:55:11.330 回答
0

我不知道这是否有帮助,但来自http://sources.redhat.com/gdb/download/onlinedocs/gdb.html#index-g_t_0040_0040_0040r_007b_002c-referencing-memory-as-an-array_007d-525

在内存中打印出多个相同类型的连续对象通常很有用;数组的一部分,或动态确定大小的数组,程序中只存在一个指针。

您可以通过将连续的内存跨度称为人工数组来做到这一点,使用二元运算符@'. The left operand of @' 应该是所需数组的第一个元素并且是一个单独的对象。右操作数应该是所需的数组长度。结果是一个数组值,其元素都是左参数的类型。第一个元素实际上是左参数;第二个元素来自紧跟第一个元素的内存字节,依此类推。这是一个例子。如果一个程序说

对于我如何解释,0x50 是指向输出消息所在字符串开头的指针地址。如果我找到有关此的更多信息,我将更新该帖子。

于 2012-04-05T09:15:09.317 回答
0

它用于将连续的内存位置打印为类似输出的数组。

$gdb *memory@10
${1,2,3,4,5,6,7,8,9,10}

它是一种功能较弱但易于使用的内存检查。如果您想要更多功能,您应该使用x(检查内存)命令。咨询

$info gdb
于 2012-04-05T10:02:34.033 回答