lldb调试器无法打印结构内容

时间:2015-08-31 11:11:31

标签: c++ c debugging clang lldb

我编译了一个使用asl_log的小程序,当在lldb中运行时,它无法从类型'aslclient'打印全局变量的内容,尽管我在调试模式下编译('-g'标志)。

也许您可以告诉我这是否与以下错误有关,以及如何解决此问题

[lldb-dev] [Bug 16191] New: LLDB fails to evaluate expressions that 
dereference a struct when inferior is built with recent Clang

来自调试器的输入:

(lldb) print log_asl_client
(aslclient) $5 = 0x0000000100200000
(lldb) print *log_asl_client
(lldb) print *log_asl_client
error: incomplete type '__asl_object_s' where a complete type is required
note: forward declaration of '__asl_object_s'
error: 1 errors parsing expression

我的编译命令:

clang -g -c -Wall -DDEBUG=1 example.c -o example.o
clang  example.o -o example

代码:

aslclient log_asl_client;
...
int main(int argc, char * const *argv) {
...
log_asl_client = asl_open(identity, facility, client_opts);
... 
--> at this point i initiate the print command in debug mode.

我使用的版本:

clang --version
Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
Target: x86_64-apple-darwin14.3.0
Thread model: posix

谢谢,

1 个答案:

答案 0 :(得分:1)

调试信息具有前向引用__asl_object_s的记录,但不包含完整类型的记录。在这种特殊情况下,这并不奇怪,因为OS X上公共头文件中__asl_object_s的唯一出现是:

typedef struct __asl_object_s *asl_object_t;

所以这是对结构的不透明引用,并且在任何地方都没有真正的定义。据推测,__asl_object_s是一个占位符,指针会被转换为使用时的实际值。

无论如何,调试器不会拒绝向您显示某些内容,实际上没有任何内容可供查看...