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 通常会警告您此类事情
相关文章:
- 使用 <list> (错误 C2760) 打印队列的元素
- 任何人都可以弄清楚这段代码如何显示运行错误?它打印无限时间 -1 以及正确答案
- 为什么重载运算符<<打印特征类成员会导致段错误?
- 我编写了以下代码来读取C++矩阵,然后打印其行和列.我收到此错误
- 我在C++中编写了一个方法来打印树类的预序,但它显示了分割错误
- 错误含义;以二进制形式打印数字
- 通过基类引用派生类后打印的错误值
- 如何在没有打印语句的情况下报告用户输入错误
- 为什么没有打印错误消息
- C++打印模板容器错误(错误:"运算符<<"的不明确重载)理解?
- 错误:变量或字段'PrintEntity'声明无效无效打印实体(实体 e);
- 将矢量的整数内容打印为字符串会导致分割错误
- 为什么我的C++代码在以下打印链表的代码片段中显示分段错误?
- C++ 添加编译器警告,以错误使用自定义打印/日志功能
- 尝试用纯 c 编程 arduino,得到以下错误:预期的"="、""、";",'asm'或"打印"之前的'__attribute__'|
- Python - 从 c++ DLL 错误打印值
- 使用std :: String ptr的错误打印std :: String
- 枚举类的GoogleTest测试错误打印
- 分段错误:打印动态数组时为 11
- Ustring错误(打印期间)