GDB调试器中<repeats n times>是什么意思?为何参数显示与声明不符?
GDB输出参数相关问题解答
1. 为什么函数定义只有1个参数,GDB显示多个参数
你观察到的this=0x7fffffffd9c0是C非静态成员函数的隐含参数:C调用类的非静态成员函数时,会自动将调用对象的内存地址作为this指针传入函数,作为第一个隐藏的入参,所以你显式定义的text参数在GDB输出里显示在第二个位置,整个函数实际运行时的入参只有this和text两个,不存在第三个参数。
2. <repeats 20 times>的含义
这是GDB打印字符串的默认简化规则:当字符串中存在连续的相同字符时,为了避免输出冗余,GDB不会逐个打印重复字符,会用'字符' <repeats 重复次数>的格式输出。你这里的输出表示text对应的字符串在"This is a test"之后,连续出现了20个空格字符。
3. 看起来的第三个参数"c,,,,"是什么
这个内容不是独立的参数,是text字符串内容的一部分。GDB打印长度过长的字符串时会自动换行,换行后的内容因为排版错位很容易被误认为是下一个入参,你当前场景下text的完整内容就是"This is a test" + 20个连续空格 + "c,,,,"拼接而成的完整字符串。
如果需要查看完整的字符串内容,可以在GDB中执行以下命令调整打印规则:
- 关闭重复字符简化输出:
set print repeats 0 - 关闭字符串长度截断:
set print elements 0
内容的提问来源于stack exchange,提问作者marlon
相关产品推荐
相关产品推荐

