【问题标题】:LLDB symbol dumpsLLDB 符号转储
【发布时间】:2018-11-26 17:33:48
【问题描述】:

我正在尝试从 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

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

【问题讨论】:

    标签: debugging symbols lldb debug-symbols undefined-symbol


    【解决方案1】:

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

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

    【讨论】:

    • 那么当程序运行时,列表中的这些值会被更新吗? :)
    • 不,这不是 lldb 所做的。这会很耗时,并且需要 lldb 和加载程序之间更紧密的耦合,我们会尽量避免这种情况,因为它会使我们更加依赖系统版本。它通常不足以保证付出努力。如果您想知道特定符号,可以使用 image lookup -s 按名称查找符号的地址。
    猜你喜欢
    • 2014-02-02
    • 2015-12-06
    • 2013-03-03
    • 1970-01-01
    • 2021-09-07
    • 2018-04-27
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多