繁体   English   中英

GDB打印错误的值

[英]GDB prints wrong values

使用GDB调试C ++程序时,我遇到了一些问题。

当我使用print object.member ,它并不总是正确打印变量的值。 相反,它将打印我正在调试的函数的参数之一的值。 尽管我始终都更改了object.member的值,但是它并没有通过函数改变。

事实是,该程序相当大,由几个模块组成,带有部分专用的模板等,因此我无法在此处全部张贴。
现在,我尝试创建一个最小的测试用例,但是无论我尝试了什么简单的方法,都无法使其正常运行。 我的意思是,不行。

因此,我想问的是,有没有人在GDB中看到过这种行为,您是否找到了造成这种情况的原因以及如何解决它?

这里存在关于类似行为的问题,但是这些问题导致程序无法正确编译(优化级别过高等)。 我用-Wall -Wextra -pedantic -g -O0编译了它,所以不能这样。

程序运行正常; cout << object.member; 并且会输出期望值,所以我不知道现在该怎么做。

我以前见过类似的行为。 不幸的是,gdb确实是基于C的,因此尽管它可以处理C ++,但我偶尔发现它对显示值有些挑剔。

当显示更复杂的项目(例如地图,字符串或智能指针的已取消引用的内容)时,有时必须非常明确地了解如何取消引用和强制转换变量。

函数本身是另一种可能性-它有什么不寻常的地方吗? 例如它是模板化的吗?

您可以在代码中创建对此变量的引用并尝试显示它吗? 或获取变量的地址并取消引用内容-当然只有在公开可用的情况下。

自然,源代码必须与您编译的代码匹配,因此必须早于exe,但gdb通常会向您发出警告

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM