2016-02-18 116 views
0

我的最終目標是修改LLDB中的Objective-C程序的symfile。我想擴充方法名稱,以便可以使用新的唯一名稱來引用調試符號文件中的現有方法。爲調試符號創建LLDB別名

例如,如果使用(lldb) b -[Foo bar]這種方法當然休息的命名-[Foo bar]的方法,我可以,不過,我想創建這種方法命名爲-[Foo baz]「別名」,所以當我執行在LLDB以下:

method_getImplementation(class_getInstanceMethod([Foo class], @selector(bar)))

我目前的方法:

(lldb) b -[Foo baz]

斷點將在地址在獲取設置解決的,這是使用dsymutil功能轉儲symfile:

dsymutil /path/to/executable -o dump.dYSM

從那裏,我可以使用dwarfdump命令美化輸出到的東西其實我可以編輯。

dwarfdump dump.dYSM/Contents/Resources/DWARF/ExecName

現在,我可以很容易地編輯AT_name屬性包含-[Foo bar]

不過,我不知道如何重新生成dYSM後,我在這「美化」格式的調試信息。

提供,我可以重新編輯的dYSM,我希望能堅持下去回LLDB使用兩種:

(lldb) target modules add(lldb) target symbol add

所以我的問題是:

  1. 有沒有更好的該怎麼辦?請注意,我沒有源文件和目標文件來重新生成新的dYSM。
  2. 是否有一個Terminal命令可以將我編輯過的dwarfdump修補到LLDB可讀的調試符號文件中?

乾杯!

回答

1

我不完全清楚你想達到什麼。這聽起來首先就像你試圖在動態確定的一些類/選擇對實現突破,在這種情況下,你可以這樣做:

(lldb) break set -a `(void *) method_getImplementation((void *)class_getInstanceMethod([Foo class], @selector(bar)))` 

注意,你必須在你已經做到這一點運行你的程序並且創建一個斷點,但是直到你運行之前,你都不會知道將要調用的具體實現,所以這不是什麼限制。

但只是在DWARF中刪除名稱實際上並未達到此效果。所以也許如果你多說一點你的實際目標,我們可以提供更多的幫助。

至於問題2,事實之後沒有工具可以編輯dSYM DWARF內容。這並不是什麼大事。