デバッグカードが死んだPythonプロセス
1510 ワード
オンラインプログラムの実行中に詰まり(ブロック)が発生し、ブレークポイントやlogで問題が見つからない場合があります.他の方法でデバッグする必要があります.本明細書はCentOS 7に基づく.
汎用デバッグ方法
プロセス番号の表示:ps auxf
このプロセスカードがどのシステムでコールバックされているかを確認します.
strace -p pid
pidを実際のプロセス番号に置き換えます.このコマンドは、システムコールバックとファイルオペレータを返します.
前のコマンドシステムコールバックのファイルオペレータの意味を確認します.
ls -l/proc/pid/fd
数値はファイルオペレータです.
/proc/pidには他にも多くのプロセス情報が含まれており、興味があれば自分で研究することができます.
このプロセスの現在のファイルアクションをリストします.
lsof -p pid
カードが死んだPythonコードを表示
プロセスカードがどの行のコードで死んでいるかを直接見たい場合はgdbを使用します.
アリクラウドのデフォルトソースにはdebuginfoがありません.ソースアドレスを追加する必要があります.
gdb環境へ:
現在のプロセスの実行場所を表示します.
現在の実行場所の呼び出しスタックを表示します.
参考資料:
DebuggingWithGdbはstraceでプロセスカードの死因を検索centos 7インストールdebuginfo gdbデバッグ実行中のPythonプロセスを使用して/PROCでLINUXカーネル状態呼び出しスタックを表示することでカード死の問題を特定する
汎用デバッグ方法
プロセス番号の表示:ps auxf
このプロセスカードがどのシステムでコールバックされているかを確認します.
strace -p pid
pidを実際のプロセス番号に置き換えます.このコマンドは、システムコールバックとファイルオペレータを返します.
前のコマンドシステムコールバックのファイルオペレータの意味を確認します.
ls -l/proc/pid/fd
数値はファイルオペレータです.
/proc/pidには他にも多くのプロセス情報が含まれており、興味があれば自分で研究することができます.
このプロセスの現在のファイルアクションをリストします.
lsof -p pid
カードが死んだPythonコードを表示
プロセスカードがどの行のコードで死んでいるかを直接見たい場合はgdbを使用します.
アリクラウドのデフォルトソースにはdebuginfoがありません.ソースアドレスを追加する必要があります.
sudo vim /etc/yum.repos.d/CentOS-Debug.repo
#Debug Info
[debug]
name=CentOS-$releasever - DebugInfo
baseurl=http://debuginfo.centos.org/$releasever/$basearch/
gpgcheck=0
enabled=1
protect=1
priority=1
sudo yum install gdb
sudo yum install yum-utils
sudo debuginfo-install glibc
sudo yum install python-debuginfo
gdb環境へ:
gdb python *pid*
現在のプロセスの実行場所を表示します.
py-list
現在の実行場所の呼び出しスタックを表示します.
py-bt
参考資料:
DebuggingWithGdbはstraceでプロセスカードの死因を検索centos 7インストールdebuginfo gdbデバッグ実行中のPythonプロセスを使用して/PROCでLINUXカーネル状態呼び出しスタックを表示することでカード死の問題を特定する