请参阅下面的回溯,我想我以前没有见过这个,我在文档中找不到任何信息:
(gdb) bt
#0 0x000000007b44042c in Driver::setRec (this=0x1, message=@0x50)
请参阅下面的回溯,我想我以前没有见过这个,我在文档中找不到任何信息:
(gdb) bt
#0 0x000000007b44042c in Driver::setRec (this=0x1, message=@0x50)
我在文档中找不到它,但看起来这就是 gdb 显示对变量的引用的方式。根据回溯,您在类方法处停止,通过引用接受 1 个参数,并带有以下签名:Driver::setRec(message&)
.
更新:在C++ 表达式文档中
没有明确说明。唯一声明的是:@
在gdb显示一帧时显示的参数列表中,不显示参考变量的值(与其他变量不同);这避免了混乱,因为引用通常用于大型结构。引用变量的地址总是显示出来,除非你指定了`set print address off'。
在内存中打印出多个相同类型的连续对象通常很有用;数组的一部分,或动态确定大小的数组,程序中只存在一个指针。
您可以通过将连续的内存跨度称为人工数组来做到这一点,使用二元运算符
@'. The left operand of
@' 应该是所需数组的第一个元素并且是一个单独的对象。右操作数应该是所需的数组长度。结果是一个数组值,其元素都是左参数的类型。第一个元素实际上是左参数;第二个元素来自紧跟第一个元素的内存字节,依此类推。这是一个例子。如果一个程序说
对于我如何解释,0x50 是指向输出消息所在字符串开头的指针地址。如果我找到有关此的更多信息,我将更新该帖子。
它用于将连续的内存位置打印为类似输出的数组。
$gdb *memory@10
${1,2,3,4,5,6,7,8,9,10}
它是一种功能较弱但易于使用的内存检查。如果您想要更多功能,您应该使用x(检查内存)命令。咨询
$info gdb