@符号在GDB中意味着什么?

时间:2012-04-05 08:55:50

标签: gdb

请参阅下面的后面跟踪,我不认为我之前看过这个,我在文档中找不到任何信息:

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

3 个答案:

答案 0 :(得分:2)

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

更新:
C++ Expressions文档中没有明确说明@。唯一说明的是:

  

在gdb显示框架时显示的参数列表中,值为   不显示参考变量(与其他变量不同);这个   避免杂乱,因为参考通常用于大型结构。   除非您有,否则始终显示引用变量的地址   指定`set print address off'。

答案 1 :(得分: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是指向输出消息所在字符串开头的指针地址。如果我找到更多相关信息,我会更新帖子。

答案 2 :(得分:0)

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

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

它功能不强但易于使用的内存检查。如果你想要更多功率,你应该使用 x (检查内存)命令。咨询

$info gdb