lldb添加命令

編寫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");
    

使用

WeChat97e5d7673d364d8b53b8f4d3a7e76514.png
  1. 將腳本引入調試器
    command script import python腳本文件路徑

command script import /Volumes/WIN/Python/HelloWorld.py

  1. 輸入 help mycmd 可以查看到相應的提示信息
  2. 輸入 mycmd 命令可以看到打印出 hello, world,證明 test 函數的代碼得到執行。

問題

原因:

如果要在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動態調試,省去了每次煩瑣地輸入一大串命令。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. 自定義LLDB命令 我們已經學了一些基礎的LLDB命令。現在是時候吧這些只是組合起來創造一些強力的復雜調試腳...
    收納箱閱讀 1,364評論 0 3
  • 1. 為什么會有腳本橋接 在LLDB中有很多方式可以創建自定義命令。第一種便是command alias,它為一個...
    blueshadow閱讀 6,779評論 2 10
  • 前言 本文翻譯自Custom LLDB Commands in Practice 翻譯的不對的地方還請多多包涵指...
    桃紅宿雨閱讀 1,897評論 2 10
  • 相信每個iOS開發者都會斷點,斷點之后,就能使用lldb的命令進行操作,基本上每個人都用過po這個命令吧.它在斷點...
    kenny肉桂閱讀 1,744評論 0 1
  • 一、LLDB 正向開發與逆向都經常會用到LLDB調試,而熟悉LLDB調試對正向、逆向開發都有很大的幫助,尤其是動態...
    KinKen閱讀 15,688評論 5 34