使用GDB调试C ++程序时遇到了一些问题。
当我使用print object.member
时,它并不总是正确打印变量的值。相反,它打印我正在调试的函数的一个参数的值。虽然我在整个过程中更改了object.member
的值,但它并没有因函数而改变。
事实是,程序相当大,由几个模块组成,部分专用模板等,所以我不能在这里发布。
现在我尝试创建一个最小的测试用例,但无论我尝试什么简单,我都无法使它工作。我的意思是,不工作。
所以我可以问的是,有没有人在GDB中看到过这种行为,你有没有找到导致它的原因以及如何解决它?
这里有关于类似行为的问题,但是那些等于程序没有正确编译(优化级别太高等)。我用-Wall -Wextra -pedantic -g -O0
编译了它,所以不可能。
程序运行良好;我可以cout << object.member;
并输出预期值,所以我现在不知道该尝试什么。
答案 0 :(得分:0)
之前我见过类似的行为。不幸的是,gdb实际上是'C',所以虽然它会处理C ++,但我发现它偶尔会对显示值非常挑剔。
当显示更复杂的项目(例如地图,字符串或智能指针的解除引用内容)时,您有时必须非常明确地解除引用和转换变量。
另一种可能性是功能本身 - 有什么不寻常的吗?它是模板化的吗?
您可以在代码中创建对此变量的引用并尝试显示该变量吗?或者获取变量的地址并对内容进行解除 - 只有当它公开时才可用。
自然,源代码必须匹配你编译的内容,所以必须比exe早,但gdb通常会警告你这些事情