簡體   English   中英

如何在 python 腳本中導入 lldb

[英]How to import lldb in a python script

根據 LLDB 主頁,可以在 python 腳本中導入 LLDB,如下所示:

import lldb

從發布包安裝 LLDB 后(在 Lubuntu 15.04 上:sudo apt-get install lldb),我收到以下錯誤:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/lldb/__init__.py", line 52, in <module>
_lldb = swig_import_helper()
File "/usr/lib/python2.7/dist-packages/lldb/__init__.py", line 44, in swig_import_helper
ImportError: No module named _lldb

這是意料之中的! LLDB 頁面說:

LLDB 具有 Python 腳本功能,並提供了自己的 Python 模塊,名為 lldb。 如果在命令行 lldb 應用程序中運行腳本,則 Python 模塊將自動可用。 但是,如果腳本要由命令行應用程序之外的 Python 解釋器運行,則可以使用 PYTHONPATH 環境變量讓 Python 解釋器找到 lldb 模塊。

可以通過使用 -P 標志調用命令行 lldb 工具來獲得正確的路徑:

 > export PYTHONPATH=`$llvm/build/Debug+Asserts/bin/lldb -P`

如果您使用不同的構建目錄或進行了發布構建,您可能需要調整上述內容以滿足您的需求。

因此,那些有足夠信心自己構建 LLDB 的人得到了明確的指示,而只想使用已發布包的菜鳥則得到了模糊的解釋……

對於從發布包安裝所有內容的最基本情況,有沒有人弄清楚“調整上述內容以滿足您的需要”的確切含義? lldb -P 報的路徑沒有解決問題:

user@user-VirtualBox:~$ lldb -P
/usr/lib/x86_64-linux-gnu/python2.7/site-packages
user@user-VirtualBox:~$ ls /usr/lib/x86_64-linux-gnu/python2.7/site-packages
ls: cannot access /usr/lib/x86_64-linux-gnu/python2.7/site-packages: No such file or directory

看起來 lldb python 包安裝的符號鏈接是拙劣的。 如果您查看/usr/lib/llvm-3.6/lib/python2.7/site-packages/lldb ,您會看到三個損壞的 simlink 引用了不存在的x86_64-linux-gnu目錄。 這為我修復了它(在 Ubuntu 14.04 上測試,而不是 Lubuntu,但我假設問題是相同的):

cd /usr/lib/llvm-3.6/lib/python2.7/site-packages/lldb
sudo ln -sf ../../../liblldb.so.1 _lldb.so
sudo ln -sf ../../../libLLVM-3.6.0.so.1 libLLVM-3.6.0.so.1
sudo ln -sf ../../../libLLVM-3.6.0.so.1 libLLVM-3.6.so.1
export PYTHONPATH='/usr/lib/llvm-3.6/lib/python2.7/site-packages'
vagrant@Ubuntu:~$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import lldb
>>> 

lldb -P顯然試圖為/usr/lib/x86_64-linux-gnu/python2.7 python 安裝提供site-packages (正如您所觀察到的,它不存在)。

您得到的回溯表明lldb已添加到/usr/lib/python2.7 python 安裝中(這是它的__init__.py執行的地方)。

我會嘗試將/usr/lib/python2.7/site-packages目錄而不是lldb -P結果設置/添加到PYTHONPATH

你可以嘗試在 lldb-dev 郵件列表上詢問這個問題,或者甚至向 lldb.llvm.org bugzilla 提交一個錯誤。 lldb for Linux 比 OSX 版本處於更早的開發階段,可能大多數 Linux 用戶實際上都是自己構建它以獲得最新的好處,所以沒有人注意到這個問題。

https://bugs.launchpad.net/ubuntu/+source/llvm-defaults/+bug/1972855

啟動 lldb 會導致以下情況發生:

$ lldb
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'lldb.embedded_interpreter'
(lldb)

這會導致問題,例如,QtCreator 在嘗試使用 lldb 調試任何內容時會停止。

$ lldb -P給出以下路徑:

/usr/lib/local/lib/python3.10/dist-packages

但是,該路徑不存在:

$ ls -l /usr/lib/local/lib/python3.10/dist-packages
ls: cannot access '/usr/lib/local/lib/python3.10/dist-packages': No such file or directory

不過,python3-lldb-14 包提供了這個路徑:

/usr/lib/llvm-14/lib/python3.10/dist-packages/

創建從/usr/lib/llvm-14/lib/python3.10/dist-packages/usr/lib/local/lib/python3.10/dist-packages的符號鏈接使事情按預期工作:

sudo ln -s /usr/lib/llvm-14/lib/python3.10/dist-packages /usr/lib/local/lib/python3.10/dist-packages

$ ls -l /usr/lib/local/lib/python3.10/dist-packages && lldb
lrwxrwxrwx 1 root root 45 May 10 15:23 /usr/lib/local/lib/python3.10/dist-packages -> /usr/lib/llvm-14/lib/python3.10/dist-packages
(lldb)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM