debugging - 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 个“未定义”符号。我的问题是这些符号是什么意思?这是否意味着它们在运行时已解决,并且在尝试理解崩溃日志中的内容时我真的不应该担心它们吗?
解决方案
您的猜测是正确的,未定义符号是一个二进制文件想要从其他二进制文件中使用的符号。当您的程序运行时,它们将由加载程序修复。
例如,如果你编写标准的“hello world”程序,主二进制文件将有一个未定义的符号“printf”。U
顺便说一句,这些与您在输出中看到的类型符号相同nm
。
推荐阅读
- javascript - 在对象数组中查找包含对象数组中的子项的值
- r - ROracle 安装 - 无法加载共享对象 ROracle.dll
- mysql - 查询 MYSQL 中单列中所有值匹配的项目
- javascript - 单击提交按钮时如何启用复选框
- bash - 如何使用 bash/sh shell 从容器内部终止容器进程(PID 1)
- spring-boot - 查找 spring @Transactional 的事务 id
- c# - 如何通过 Slack API 检索和使用“trigger_id”?
- html - HTML表格在打印时保持列宽
- node.js - 文件未使用 gulp-concat 加载
- python - 同时运行多个python文件