編寫LLDB腳本
先在 /Volumes/WIN/Python 這個目錄下新建一個HelloWorld.py的文件,文件內容如下:
# -*- coding:utf-8 -*-
# debugger 是當前調試器對象,類型是lldb.SDBDebugger
# command 是命令的參數,類型是字符串
# reulit 是執行命令后返回的參數,類型是lldb.SBCommandReturnObject
# internal_dict 是當前腳本所有變量和函數,類型是字典
def test(debugger, command, result, internal_dict):
""" This is my first lldb script """
print "hello, world"
# lldb_init_module函數是在加載腳本時會執行的
# command script -f 是用于將Python代碼導出成自定義的命令,其中HelloWorld是腳本的名稱,這個要和腳本的文件名保持一致,test是函數的名稱,mycmd是導出的命令名稱。
# 啟動 LLDB 加載這一段腳本,輸入 mycmd 命令就可以執行 test 函數里的代碼。
def __lldb_init_module(debugger, internal_dict):
debugger.HandleCommand("command script add -f HelloWorld.test mycmd");
使用
- 將腳本引入調試器
command script import python腳本文件路徑
command script import /Volumes/WIN/Python/HelloWorld.py
- 輸入 help mycmd 可以查看到相應的提示信息
- 輸入 mycmd 命令可以看到打印出 hello, world,證明 test 函數的代碼得到執行。
問題
- python語法錯誤 no encoding declared
SyntaxError: Non-ASCII character '\xe5' in file Test1.py on line 8, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
原因:
如果要在python2的py文件里面寫中文,則必須要添加一行聲明文件編碼的注釋,否則python2會默認使用ASCII編碼。
解決:
python的默認編碼文件用的是ASCII碼,將文件存成了UTF-8,編譯通過。
也可以在py文件開頭(必須在最前面),加入
#coding=utf-8
或者
# -*- coding:utf-8 -*-
了解LLDB配置文件
LLDB打開時會自動加載 ~/.lldbinit配置文件,通過這個配置文件可以設置加載的腳本路徑等。上面我們編寫的腳本文件H e l lo W o r l d.py,在啟動LLDB需要手動執行 command script import 才能加入腳本,如果將command script import 添加到 ~/.lldbibit 中,那么每次啟動LLDB時就會自動引入腳本。默認這個配置文件是不存在的,我們手動創建一個,然后添加下面的命令,這樣每次LLDB啟動都會自動引入HelloWorld.py
command script import /Volumes/WIN/Python/HelloWorld.py
除了引入自定義腳本,lldbinit配置文件還可以設置命令的別名、命令提示符文字等,比如我們添加下面的信息:
setting set prompt "(exchen lldb)"command alias connect process connect connect://127.0.0.1:1234
此時再進入LLDB會發現命令行的提示文字顯示的是“(exchen lldb)”,輸入connect命令別名就可以連接程序進行LLDB動態調試,省去了每次煩瑣地輸入一大串命令。