おそらくうまくいく基本的なアプローチは、デバッガにロードするデバッグしたいプログラムにシグナルハンドラを設定することです。その後、プロセスにデバッグする信号(kill
コマンドを使用)を送信すると、リモートで接続できます。出力以上のことから
$ python /tmp/foo.py
8530
私たちは親切に私達がデバッグするPythonのプロセスのPIDを記載されている。ここで
は、あなたが今python trepandebuggers
import signal
def signal_handler(num, f):
from trepan.interfaces import server as Mserver
from trepan.api import debug
connection_opts={'IO': 'TCP', 'PORT': 1955}
intf = Mserver.ServerInterface(connection_opts=connection_opts)
dbg_opts = {'interface': intf}
print('Starting TCP server listening on port 1955.')
debug(dbg_opts=dbg_opts)
return
signal.signal(signal.SIGUSR1, signal_handler)
# Go about your business...
import time
import os
print(os.getpid())
for i in range(10000):
time.sleep(0.2)
経由でこれを行うことを実行したい方法です。
は今シェルで、私たちは、シグナルハンドラに設定されているデバッガに入るための処理を指示する信号を送ります。 プロセスIDを調整する必要があります。
$ kill -USR1 8530 # Adjust the pid to what you see above
そして、我々はあなたが今 新しい出力表示されるはずです/tmp/foo.py
を実行したシェルで:戻る私たちはkill -USR1
を発行したシェルに
$ python /tmp/foo.py
8530
Starting TCP server listening on port 1955. # This is new
を、我々は今、プロセスは現在の内部停止添付するデバッガ:偉大な答えを
$ trepan2 --client --port 1955
Connected.
(/tmp/foo.py:11 @101): signal_handler
-- 11 return
(trepan2*) list
6 connection_opts={'IO': 'TCP', 'PORT': 1955}
7 intf = Mserver.ServerInterface(connection_opts=connection_opts)
8 dbg_opts = {'interface': intf}
9 print('Starting TCP server listening on port 1955.')
10 debug(dbg_opts=dbg_opts)
11 -> return
12
13 signal.signal(signal.SIGUSR1, signal_handler)
14 # Go about your business...
(trepan2*) backtrace
-> 0 signal_handler(num=10, f=<frame object at 0x7f9036796050>)
called from file '/tmp/foo.py' at line 11
## 1 <module> file '/tmp/foo.py' at line 20
ありがとう! –