簡體   English   中英

如何將遠程調試器附加到 Python 進程?

[英]How do I attach a remote debugger to a Python process?

我厭倦了插入

import pdb; pdb.set_trace()

進入我的 Python 程序並通過控制台調試。 如何連接遠程調試器並從文明的用戶界面插入斷點?

使用Winpdb 它是一個獨立於平台的圖形 GPL Python 調試器,支持通過網絡進行遠程調試、多線程、命名空間修改、嵌入式調試、加密通信,並且比 pdb 快 20 倍。

特征:

  • GPL 許可證。 Winpdb 是免費軟件。
  • 與 CPython 2.3 到 2.6 和 Python 3000 兼容
  • 與 wxPython 2.6 到 2.8 兼容
  • 獨立於平台,並在 Ubuntu Gutsy 和 Windows XP 上測試。
  • 用戶界面:rpdb2 是基於控制台的,而 winpdb 需要 wxPython 2.6 或更高版本。

截屏
(來源: winpdb.org

好吧,你可以得到與使用扭曲沙井非常相似的東西,它的工作原理如下:

from twisted.internet import reactor
from twisted.cred import portal, checkers 
from twisted.conch import manhole, manhole_ssh 

def getManholeFactory(namespace):
    realm = manhole_ssh.TerminalRealm()
    def getManhole(_): 
        return manhole.Manhole(namespace) 
    realm.chainedProtocolFactory.protocolFactory = getManhole
    p = portal.Portal(realm)
    p.registerChecker(
        checkers.InMemoryUsernamePassword DatabaseDontUse(admin='foobar'))
    f = manhole_ssh.ConchFactory(p)
    return f

reactor.listenTCP(2222, getManholeFactory(globals()))
reactor.run() 

然后你只需通過 ssh 登錄程序;

$ ssh admin@localhost -p 2222
admin@localhost's password: 

使用foobar作為密碼。

當你登錄時,你會得到一個正常的 python 提示,你可以在其中戳數據。 這與將回溯發送到主機並不完全相同。

現在,這可能很難集成到 GUI 程序中,在這種情況下,您可能需要選擇另一個反應器,例如對於使用 gtk2reactor 等的基於 gtk 的程序。

如果您想要發送實際的回溯,您需要為 stderr、stdin 和 stdout 創建一個套接字通道,該通道通過網絡而不是打印到本地主機。 使用twisted應該不會太難完成。

有點晚了,但這是一個非常輕量級的遠程調試解決方案,由http://michaeldehaan.net/post/35403909347/tips-on-using-debuggers-with-ansible提供:

  1. 在遠程主機上pip install epdb
  2. 確保您的防火牆設置不允許非本地連接到遠程主機上的端口 8080,因為epdb默認偵聽任何地址 ( INADDR_ANY ),而不是 127.0.0.1。
  3. 而不是使用import pdb; pdb.set_trace() import pdb; pdb.set_trace()在你的程序中,使用import epdb; epdb.serve() import epdb; epdb.serve()
  4. 安全登錄到遠程主機,因為epdb.connect()使用 telnet。
  5. 使用python -c 'import epdb; epdb.connect()' python -c 'import epdb; epdb.connect()'

當然,調整安全位以適應您的本地網絡設置和安全立場。

來自現代 IDE 的兩種解決方案:

  1. PTVS (Visual Studio 的 Python 工具)跨平台遠程調試

  2. PyCharm / PyDev遠程調試

我發現 pudb 在緊急情況下很有用

pip install pudb

項目描述https://pypi.org/project/pudb/

教程: https ://vimeo.com/5255125

暫無
暫無

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

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