c++ - 在源文件中包含额外的调试信息,以便在 Code::Blocks 中使用 gdb 进行调试

标签 c++ debugging gdb metadata codeblocks

在 Code::Blocks 中调试 C++ 源代码时,传递函数参数或数据结构成员的点仅显示为它们的地址。

经过一些研究,我发现我可以将自定义 watch 输入为 @ 以使其显示为数组,但是我无法编辑默认值显示在结构上。

我想知道是否有某种方法可以使用特殊注释来标记源代码,这些注释可以在调试期间进行解析以自动执行此操作并使复杂对象在调试期间更易于查看。

struct {
    size_t n;
    int *p; /* I want gdb to interpreted this symbols as p@n by default */
}

我也希望能够对函数参数进行类似的规范。

首先这是否可能,我在网上找不到任何关于标记源代码以帮助 gdb 的东西,并且怀疑它甚至从未查看源代码,因为调试信息存储在可执行文件或调试数据库中。

如果有某种方法可以做到这一点,我会怎么做?

注意:如果有 Code::Blocks 特定的解决方案,我会很高兴。

最佳答案

您遇到的问题似乎与调试信息的质量无关,而仅与调试器如何显示特定类型变量的值有关。这通常是可配置的或可编写脚本的。

Code::Blocks 使用松鼠脚本 Debugger scripting .通过扩展该脚本,您可以使调试器以特定方式命令 GDB,然后按照您喜欢的方式解析和显示结果。脚本文件夹中的 gdb_types.script 由 Code::Blocks 运行。

如果你想script GDB本身然后可以在 Code::Blocks 的“设置 -> 编译器和调试器 -> 调试器 -> 初始命令”中完成,前提是脚本将由 GDB 运行。然后您可以从 gdb_types.script 调用该脚本中定义的函数。

关于c++ - 在源文件中包含额外的调试信息,以便在 Code::Blocks 中使用 gdb 进行调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51725570/

相关文章:

C++ 多线程数组

c++ - Ctags 错误 "Is a directory"

c# - 如何使用反射调试从 app.config 加载的对象?

c - SSE 移位整数

c - 在使用 gdb 运行 exucatble 时使用断点时会在某些地方发生中断

c++ - 这是解决 mixins 构造函数问题的有效解决方法吗?

c++ - 使用自定义消息防止 Windows 关机

swift - 在 Ubuntu 18.04 中使用 LLDB 调试 Swift 5.1 时<无法解析类型>

reactjs - 运行 WSL 时如何在 Windows 中设置 VS 代码调试?

Windows 强制执行 READ-ONLY .text 部分,即使被 ld 链接器禁用