【问题标题】:Why does LLDB print wrong values when debugging?为什么 LLDB 在调试时打印错误的值?
【发布时间】:2023-05-15 05:37:01
【问题描述】:

我正在尝试调试一些代码,但调试器给出的值与当前代码无关。

我有另一台安装了 gdb 的 Linux 笔记本电脑,一切正常。当我在 MacBook 上使用 LLDB 时,问题就出现了。

代码非常简单,我只是将值 12 分配给名为 v1 的变量,仅此而已。问题不在于代码。

当我在 LLDB 中逐步执行代码并在分配之前打印 v1 的值时,我得到了 0,在分配之后我得到了 '\f'。

为了编译,我使用选项 -g 尝试了 gcc 和 clang。

【问题讨论】:

  • 如果你展示你的测试程序,它可能有助于展示确切的问题。您提到它很简单 - 是否足够简单,可以包含在问题中?另外,你是如何在 macOS 上编译它的?用clang还是gcc?使用优化 (-O)?

标签: debugging gdb lldb


【解决方案1】:

当我在 LLDB 中逐步执行代码并在分配之前打印 v1 的值时,我得到了 0,在分配之后我得到了 '\f'。

假设v1 是一个堆栈变量,那么它在赋值之前包含的值是未定义的。

您打印后的值:\f 12

为什么 LLDB 将这个值打印为一个字符而不是一个整数,如果没有看到源就无法判断。可能是因为您将其声明为char

【讨论】:

  • 我将其声明为 int8_t v1 = 12;
  • @EliasEl int8_t 通常只是 signed char 的别名。