首页 > 解决方案 > LLDB 符号转储

问题描述

我试图从 LLDB shell 中理解以下符号转储

(lldb) target create --no-dependents '9.0/Symbols/Library/Application Support/WatchKit/WK'
Current executable set to '9.0/Symbols/Library/Application Support/WatchKit/WK' (armv7k).
(lldb) image list
[  0] 675ED1EB-BAA0-3453-B7B1-3E69310F40FD 0x00004000 9.0/Symbols/Library/Application Support/WatchKit/WK
(lldb) image dump symtab
Dumping symbol table for 1 modules.
Symtab, file = 9.0/Symbols/Library/Application Support/WatchKit/WK, num_symbols = 6:
               Debug symbol
               |Synthetic symbol
               ||Externally Visible
               |||
Index   UserID DSX Type            File Address/Value Load Address       Size               Flags      Name
------- ------ --- --------------- ------------------ ------------------ ------------------ ---------- ----------------------------------
[    0]      0     Code            0x0000000000007fcc                    0x0000000000000030 0x001e0000  stub helpers
[    1]      1   X Data            0x0000000000004000                    0x0000000000003fcc 0x000f0010 _mh_execute_header
[    2]      2   X ReExported                                                               0x000b0000 main -> /System/Library/PrivateFrameworks/SockPuppetGizmo.framework/SockPuppetGizmo`_SPApplicationMain
[    3]      3   X Undefined       0x0000000000000000                    0x0000000000000000 0x00010100 _SPApplicationMain
[    4]      4   X Undefined       0x0000000000000000                    0x0000000000000000 0x00010500 dyld_stub_binder
[    5]      5  S  Trampoline      0x0000000000007ffc                    0x0000000000000004 0x00000000 main

其中大部分我都能理解,因为有与符号相关的地址和大小,但其中一些我不明白。0x00在这种情况下,地址和0x00大小有 2 个“未定义”符号。我的问题是这些符号是什么意思?这是否意味着它们在运行时已解决,并且在尝试理解崩溃日志中的内容时我真的不应该担心它们吗?

标签: debuggingsymbolslldbdebug-symbolsundefined-symbol

解决方案


您的猜测是正确的,未定义符号是一个二进制文件想要从其他二进制文件中使用的符号。当您的程序运行时,它们将由加载程序修复。

例如,如果你编写标准的“hello world”程序,主二进制文件将有一个未定义的符号“printf”。U顺便说一句,这些与您在输出中看到的类型符号相同nm


推荐阅读