欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

使用Python擴(kuò)展lldb-創(chuàng)新互聯(lián)

Xcode集成了LLDB,進(jìn)一步簡化了程序調(diào)試流程。雖然LLDB很強(qiáng)大,但是它的命令很有限。所幸的是,lldb包含了對python的支持,使得lldb的拓展成為可能。本人在開發(fā)過程中很喜歡使用image lookup 命令,但是苦于每次只能執(zhí)行一條,相當(dāng)耗時(shí),因此一直想要找到一種批量執(zhí)行的方法。于是將目光放到了lldb python上......

清江浦網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)公司2013年開創(chuàng)至今到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。

問題:批量執(zhí)行image lookup -a

(1)編寫python腳本(layne_command.py),代碼如下:

#coding=utf-8
#自定義lldb命令 
import lldb
import commands
import optparse
import shlex

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腳本編碼,否則運(yùn)行時(shí)注釋中的中文將會報(bào)錯。
②運(yùn)行腳本時(shí)入口為 __lldb_init_module(debugger,internal_dict) , 即先執(zhí)行函數(shù) __lldb_init_module(debugger,internal_dict) 中的內(nèi)容。debugger.HandleCommand是python中執(zhí)行l(wèi)ldb命令的主要方式。
layne_imagelookup是批量執(zhí)行image lookup命令的函數(shù),也是自定義的新的lldb命令的名稱。
optparseshlex是用于解析參數(shù)的兩個(gè)重要的庫。通過optparse來生成解析器。

(2)xcode中引用python腳本

在xcode中crash的時(shí)候,下方會出現(xiàn)lldb控制臺,輸入如下命令:
command script import ~/Python/lldb/layne_command.py
回車之后將會出現(xiàn)一行提示:The "layne_imagelookup" python command has been installed and is ready for use(這個(gè)提示是事先定義在layne_command.py中的)。然后就可以在lldb控制臺像po命令那樣使用layne_imagelookup了,使用方法:假如crash的時(shí)候出現(xiàn)的內(nèi)存地址為
0x1111111 0x2222222 0x3333333 0x4444444 0x5555555
以前的做法是對每個(gè)地址使用image lookup -a命令:

(lldb)image lookup -a 0x1111111   
(lldb)image lookup -a 0x2222222
(lldb)image lookup -a 0x3333333
(lldb)image lookup -a 0x4444444
(lldb)image lookup -a 0x5555555

現(xiàn)在只需要:

(lldb)layne_imagelookup 0x1111111 0x2222222 0x3333333 0x4444444 0x5555555

結(jié)果將會以"************"分隔開顯示,如:

(lldb) layne_imagelookup 0x0000000107bcd914 0x000000010de2435a 0x000000010de2b245 0x000000010e1e6865 0x000000010e832998
*************************************
      Address: Maketion[0x0000000100004914] (Maketion.__TEXT.__text + 8356)
      Summary: Maketion`-[AppDelegate application:didFinishLaunchingWithOptions:] + 196 at AppDelegate.m:251
*************************************
      Address: UIKit[0x000000000002135a] (UIKit.__TEXT.__text + 128650)
      Summary: UIKit`-[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 267
*************************************
      Address: UIKit[0x0000000000028245] (UIKit.__TEXT.__text + 157045)
      Summary: UIKit`-[UIApplication _runWithMainScene:transitionContext:completion:] + 1720
*************************************
      Address: UIKit[0x00000000003e3865] (UIKit.__TEXT.__text + 4070293)
      Summary: UIKit`-[__UICanvasLifecycleMonitor_Compatability _scheduleFirstCommitForScene:transition:firstActivation:completion:] + 249
*************************************
      Address: UIKit[0x0000000000a2f998] (UIKit.__TEXT.__text + 10673352)
      Summary: UIKit`-[_UICanvasLifecycleSettingsDiffAction performActionsForCanvas:withUpdatedScene:settingsDiff:fromSettings:transitionContext:] + 231

(3)自動加載python腳本

手動加載自定義的python腳本有個(gè)缺點(diǎn):程序再次運(yùn)行之后,若還想使用自定義的命令,則必須再次調(diào)用
command script import ~/Python/lldb/layne_command.py,然后才能使用layne_imagelookup命令。因此這里配置一下使其自動加載。
原理:xcode啟動的時(shí)候會讀取一個(gè)默認(rèn)文件:~/.lldbinit,只需要將命令command script import ~/Python/lldb/layne_command.py寫入這個(gè)文件即可。
①打開Terminal,使用vim打開文件~/.lldbinit(若沒有,vim會自動創(chuàng)建)。
②將命令command script import ~/Python/lldb/layne_command.py寫入文件~/.lldbinit,保存退出。 (注意:layne_command.py的路徑必須正確!)
以后只要xcode啟動起來就可以在lldb控制臺使用layne_imagelookup.

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站題目:使用Python擴(kuò)展lldb-創(chuàng)新互聯(lián)
轉(zhuǎn)載來于:http://chinadenli.net/article46/desgeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣云服務(wù)器、外貿(mào)建站、網(wǎng)站導(dǎo)航、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司