c++ - 在源文件中包含额外的调试信息,以便在 Code::Blocks 中使用 gdb 进行调试
问题描述
在 Code::Blocks 中调试 C++ 源代码时,传递函数参数或数据结构成员的点仅显示为其地址。
经过一番研究,我发现我可以将自定义手表输入为 <pointer-name>@<numerical-size of variable- contains-size> 以使其显示为数组,但是我无法编辑默认显示结构体。
我想知道是否有某种方法可以使用可以在调试期间解析的特殊注释来标记源代码,以自动执行此操作并使复杂对象在调试期间更易于查看。
IE
struct {
size_t n;
int *p; /* I want gdb to interpreted this symbols as p@n by default */
}
我也希望能够对函数参数做出类似的规范。
首先这是可能的,我在网上找不到任何关于标记源代码以帮助 gdb 的东西,并且怀疑它甚至从未查看源代码,因为调试信息要么存储在可执行文件中,要么存储在调试数据库中。
如果有某种方法可以做到这一点,我该怎么做?
注意:如果有 Code::Blocks 特定的解决方案,我会很高兴的。
解决方案
您遇到的问题似乎与调试信息的质量无关,而仅与调试器如何显示某种类型的变量的值有关。这通常是可配置的或可编写脚本的。
Code::Blocks 将 squirrel 脚本用于Debugger 脚本。通过扩展该脚本,您可以使调试器以特定方式命令 GDB,然后以您喜欢的方式解析和显示结果。脚本文件夹中的 gdb_types.script 由 Code::Blocks 运行。
如果您想编写 GDB本身的脚本,那么可以在 Code::Blocks 的“设置 -> 编译器和调试器 -> 调试器 -> 初始命令”中完成,前提是脚本将由 GDB 运行。然后,您可以从 gdb_types.script 调用该脚本中定义的函数。
推荐阅读
- java - 计算多行用户输入的单词和字符数
- css - 将背景的起始位置偏移 50%?
- c - 为什么在声明之前没有主体调用此函数,“2”到底在做什么?
- json - 如果键值等于 True,则打印所有 JSON 结果
- postgresql - 当postgress返回“重复键值违反唯一约束”时,如何在golang/gorm中获取重复的字段名称?
- javascript - 进入object1.object2,写一个变量而不是object 2
- c++ - 数组中的元素似乎在变化,数组的前半部分已排序,后半部分是随机的
- javascript - D3 V6 - 缩放和拖动功能
- react-native - React Native,TouchableOpacity 警报一无所获
- javascript - __proto__ 和原型的区别