C结构-lldb表达式失败

时间:2018-08-27 16:19:05

标签: debugging lldb

为什么除非声明默认变量,否则lldb的expression无法理解我的C结构?

struct YD_MENU {
    char menu_name[10];
    int menu_option;
};

int main() {

    return 0;
}

在main内部添加一个断点...

(lldb) exp struct YD_MENU $b
error: variable has incomplete type 'struct YD_MENU'
forward declaration of 'YD_MENU'

如果我将其更改为以下内容...

struct YD_MENU {
    char menu_name[10];
    int menu_option;
} default_menu;

(lldb) exp struct YD_MENU $a工作正常。

我认为这与Why can't LLDB evaluate this expression?有关,但是建议的答案不起作用。

(lldb) version
lldb-1000.0.29

1 个答案:

答案 0 :(得分:3)

clang(以及gcc)对于不为“未使用的类型”发出类型信息非常积极。当您执行类似import <Cocoa/Cocoa.h>之类的操作时,会有很多类型浮动,以确保调试信息的大小合理。这就是为什么当您定义一个结构但不使用它时,lldb无法看到类型的原因。实际上,有关类型的信息并没有提供给lldb查看。