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