2017-06-19 35 views
0

主要的開放式問題是:如何將LLDB用於轉換爲C/C++的語言。我要的是掛接到默認LLDB功能與python腳本,以便它如何鉤入lldb?

  • 攔截符號demangling,使LLDB顯示堆棧跟蹤更好的函數名和更好的局部/全局變量名。
  • 截取數據格式以處理名稱未知的類型,因此無法通過type summary add來處理。應該通過檢查結構來執行「匹配」。
  • 截取「創建斷點」請求,來源於原始語言文件,而不是C/C++將其映射到正確的源/行。

最終目標是爲LLDB提供一個python腳本來支持這個腳本,以便衆多UI LLDB前端(XCode,VSCode等)自動從中受益。

編輯:我設法通過從所有SBCompileModules獲取所有類型,檢查它們,並提供syntetic格式化程序來解決類型問題。符號「demangling」和斷點映射仍然是個問題。

回答

1

您還可以添加匹配.*的正則表達式匹配格式程序。由於lldb會首先嚐試所有非正則表達式匹配器,因此它不會取代內置的格式化器。正則表達式匹配比靜態模式匹配慢,但對於您的目的可能仍然可以接受,如果應用程序很大,也許不會比在應用程序中爲每種類型添加一個格式化程序的結果差得多。這可能更容易實施。

您可以使用script.thread.python_function & script.frame.python線程&幀格式(詳見這裏:http://lldb.llvm.org/formats.html)進行自定義回溯印刷 - 包括你demangling - 以回溯輸出。

沒有辦法從Python提供定製的demangler。並且符號打印不是用格式化程序線框打印的方式完成的,所以沒有辦法介入。我看不到從外部做這件事的好方法。

雖然lldb被設計爲允許這樣做,但目前還沒有一種在Python中編寫斷點解析器內核的可插拔方法。但是,如果您可以讓代碼轉換器將#file & #line聲明發送到C/C++源代碼中,那麼這些重新映射將進入調試信息,以便lldb可以接收它們。