【注意】最后更新于 October 17, 2018,文中内容可能已过时,请谨慎使用。
Xcode集成了LLDB,进一步简化了程序调试流程。虽然LLDB很强大,但是它的命令很有限。所幸的是,lldb包含了对python的支持,使得lldb的拓展成为可能。本人在开发过程中很喜欢使用image lookup 命令,但是苦于每次只能执行一条,相当耗时,因此一直想要找到一种批量执行的方法
问题
批量执行image lookup -a
optparse
和shlex
是用于解析参数的两个重要的库。通过optparse
来生成解析器
- 编写python脚本(layne_command.py),代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| #coding=utf-8
#自定义lldb命令
import lldb
import commands
import optparse
import shlex
#批量执行`image lookup`命令的函数,也是自定义的新的lldb命令的名称
def layne_imagelookup(debugger, command, result, internal_dict):
target = debugger.GetSelectedTarget()
process = target.GetProcess()
thread = process.GetSelectedThread()
command_args = shlex.split(command)
parser = create_custom_parser()
try:
(options, args) = parser.parse_args(command_args)
except:
result.SetError ("option parsing failed")
return
if args:
for address in args:
print("*************************************")
debugger.HandleCommand('image lookup -a %s'%(address))
def create_custom_parser():
usage = "usage: %prog [options]"
description = '''Parse Symbols to Human-readable Format.'''
#生成解析器
parser = optparse.OptionParser(description=description, prog='print_frame',usage=usage)
# parser.add_option('-p','--parse',type='string',dest = 'parse',help='parse symbols.');
return parser
#运行脚本入口
def __lldb_init_module(debugger, internal_dict):
debugger.HandleCommand('command script add -f layne_command.layne_imagelookup layne_imagelookup')
print('The "layne_imagelookup" python command has been installed and is ready for use.')
|
然后保存为文件layne_command.py
,放到如下目录(自己指定):~/Python/lldb/layne_command.py
说明:
①#coding=utf-8指定python脚本编码,否则运行时注释中的中文将会报错。
②运行脚本时入口为 __lldb_init_module(debugger,internal_dict)
。debugger.HandleCommand
是python
中执行lldb
命令的主要方式。
③layne_imagelookup
是批量执行image lookup
命令的函数,也是自定义的新的lldb命令的名称。
④optparse
和shlex
是用于解析参数的两个重要的库。通过optparse
来生成解析器。