目次
1. pdb
2. pdb 基本コマンド
3.break コマンドを使用して、指定したファイルの指定した場所にブレークポイントを設定します
3.2 その他の場合 ファイル内の指定した場所にブレークポイントを設定する " >3.2 その他の場合 ファイル内の指定した場所にブレークポイントを設定する
4 のように、相対パスの下のファイル名を使用してブレークポイントを設定することもできます。 . pdb 使用時に発見された問題
4.1 ソフト リンクを使用すると、pdb で表示されるファイル パスが実際のパスと一致しない" >4.1 ソフト リンクを使用すると、pdb で表示されるファイル パスが実際のパスと一致しない
4.2 pdb はモデルの forward() メソッドにブレークポイントを追加できない場合があります" >4.2 pdb はモデルの forward() メソッドにブレークポイントを追加できない場合があります
ホームページ バックエンド開発 Python チュートリアル Pythonデバッグツールpdb(Python Debugger)の使い方まとめ

Pythonデバッグツールpdb(Python Debugger)の使い方まとめ

Nov 07, 2022 pm 04:46 PM
python

この記事では、Python に関する関連知識を提供します。主に、基本的な pdb コマンド、break によるブレークポイントの設定など、pdb デバッグ ツールに関する関連コンテンツを紹介します。一緒に見てみましょう。 , 皆様のお役に立てれば幸いです。

Pythonデバッグツールpdb(Python Debugger)の使い方まとめ

[関連する推奨事項: Python3 ビデオ チュートリアル ]

1. pdb

を使用するには 2 つの方法があります。 pdb: python debugger

1. 非侵入的な方法 (ソース コードを変更する必要はなく、コマンド ラインから直接実行してデバッグできます)

python3 -m pdb filename.py

2.侵入的なメソッド (デバッグ中のコードに次のコードを追加して、コードを通常どおり実行する必要があります)

PDB をインポートする pdb.set_trace()

コマンド ラインに次のプロンプトが表示されたら、pdb が正しく開かれたことを意味します

(Pdb)

2. pdb 基本コマンド

#step または s関数を入力します (for ループに入るには、step の代わりに next を使用します)return または r現在の関数から戻るまでコードを実行 next または nExecute次の行up または u前の呼び出しポイントに戻ります (前の行ではありません) p x印刷変数 ## の値

実際に使用してみると、シェルスクリプトでPythonファイルを実行すると、pdbを使用したデバッグができずに終了してしまう場合があります。現時点では、デバッグのために py ファイルを直接実行することのみが可能です。

3.break コマンドを使用して、指定したファイルの指定した場所にブレークポイントを設定します

3.1 このファイルの指定した場所にブレークポイントを設定します

たとえば、次の例では、モデルの forward() メソッドを入力して順伝播中のデータ処理プロセスを表示する場合、最初の行にブレークを設定することしかできません。ポイント、pdb.set_trace()

ただし、モデルが非常に複雑な場合があり、このメソッドを使用すると、プログラムがエラーを報告して直接終了します (私はそうしません)理由がわかっている場合は、ここで Break コマンドを使用することを検討できます。ブレークポイントを 1 行に挿入して、forward() に到達したときにプログラムが停止するようにします。

import torchimport torch.nn as nnimport pdbclass EncoderLayer(nn.Module):    def __init__(self):        super().__init__()
        self.conv1 = nn.Conv2d(4, 10, (3, 3))
        self.conv2 = nn.Conv2d(10, 4, (3, 3))
        self.relu = nn.ReLU()    def forward(self, x):
        x=self.relu(self.conv1(x))        return self.relu(self.conv2(x))class Encoder(nn.Module):    def __init__(self,num_layers):        super().__init__()        # encoders 由 num_layers个 EncoderLayer子层组成,每个子层结构相同,但参数不一定相同。
        self.ModelList = nn.ModuleList([EncoderLayer() for _ in range(num_layers)])    def forward(self, x):        # ModuleList是一个list,只能通过list的操作方式(如用for循环、下标索引等)进行forward计算。
        for layer in self.ModelList:
            x = layer(x)        return xif __name__=="__main__":
    pdb.set_trace()   
    input = torch.rand(5, 4, 30, 30)
    model = Encoder(num_layers=4)
    output = model(input)
ログイン後にコピー

具体的な方法: (1) まず、前の行で pdb.set_trace() を設定してプログラムを停止します。 (2) ブレーク 26 を入力するだけです。図に示すように:

Pythonデバッグツールpdb(Python Debugger)の使い方まとめこのようにして、ブレークポイントは正常に設定され、プログラムは forward() に到達すると停止します。

ここでの 26 は行数です。 ブレークポイントの位置をコメント にすることはできないことに注意してください。たとえば、25 行目 (コメント行) にブレークポイントを設定すると、次のようになります。失敗します:

Pythonデバッグツールpdb(Python Debugger)の使い方まとめ要約すると、同じファイルにブレークポイントを設定するコマンドは次のとおりです:

break line

3.2 その他の場合 ファイル内の指定した場所にブレークポイントを設定する

#設定したいブレークポイントが初期実行ファイルにない場合、ブレーク ポイントをどのように使用できますか?他のファイルにブレークポイントを設定するコマンドは?この例を見てみましょう:

3.1 コードを 3 つの py ファイルに分割し、同じパスの下に置きます:

  ![Pythonデバッグツールpdb(Python Debugger)の使い方まとめ](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4b5d476ba5b14b0ba541d78930b9704a~tplv-k3u1fbpfcp-zoom-1.image)
ログイン後にコピー

各ファイルの内容を見てください:

run.py:

pdb.set_trace() の初期設定は run.py にあります。

import torchfrom encoder import Encoderimport pdbif __name__=="__main__":
    pdb.set_trace()    input = torch.rand(5, 4, 30, 30)
    model = Encoder(num_layers=4)
    output = model(input)
ログイン後にコピー

encoder.py:

from encoder_layer import EncoderLayerimport torch.nn as nnclass Encoder(nn.Module):    def __init__(self,num_layers):        super().__init__()        # encoders 由 num_layers个 EncoderLayer子层组成,每个子层结构相同,但参数不一定相同。
        self.ModelList = nn.ModuleList([EncoderLayer() for _ in range(num_layers)])    def forward(self, x):        # ModuleList是一个list,只能通过list的操作方式(如用for循环、下标索引等)进行forward计算。
        for layer in self.ModelList:
            x = layer(x)        return x
ログイン後にコピー

encoder_layer.py:

import torch.nn as nnclass EncoderLayer(nn.Module):    def __init__(self):        super().__init__()
        self.conv1 = nn.Conv2d(4, 10, (3, 3))
        self.conv2 = nn.Conv2d(10, 4, (3, 3))
        self.relu = nn.ReLU()    def forward(self, x):
        x=self.relu(self.conv1(x))        return self.relu(self.conv2(x))
ログイン後にコピー

ここで、run.py を実行してから Set encoder.py の 12 行目にあるブレークポイント、つまり self.ModelList:

のレイヤーの

コマンドは次のとおりです:

break encoder.py:12

つまり、break filename: linePythonデバッグツールpdb(Python Debugger)の使い方まとめプログラムは、output = model(input):Pythonデバッグツールpdb(Python Debugger)の使い方まとめから forward() に入ることができることがわかります。デバッグに非常に便利です。

最初のブレークポイントとターゲット ブレークポイントが同じディレクトリ内のファイルにない場合は、

(Pdb) break ../transformer/asr_model.py:91Breakpoint 1 at /local/wenet/examples/aishell/s0/wenet/transformer/asr_model.py:91(Pdb)
ログイン後にコピー

4 のように、相対パスの下のファイル名を使用してブレークポイントを設定することもできます。 . pdb 使用時に発見された問題

4.1 ソフト リンクを使用すると、pdb で表示されるファイル パスが実際のパスと一致しない

次のように図中、pdb これは 3 行で構成されており、1 行目はファイルパス、2 行目は現在実行されているコード行、3 行目は入力コマンドラインです。

ソフトリンクがある場合、pdbで表示されるパスはソフトリンクが指すパスですが、実際のコードパスはソフトリンクの内容をコピーしたパスになります。これら2つのパスは異なります。だから注意しなければなりません。 Pythonデバッグツールpdb(Python Debugger)の使い方まとめ

4.2 pdb はモデルの forward() メソッドにブレークポイントを追加できない場合があります

pdbpdb を使用できない場合があります。 set_trace( ) モデルの forward() メソッドにブレークポイントを追加します。エラー メッセージは次のとおりです:

#コンパイルされた関数は可変数の引数を取ることも、デフォルトでキーワードのみの引数を使用することもできません

おそらく、「コンパイルされた関数は可変数のパラメーターを受け入れることができません。また、デフォルトではキーワードのみのパラメーターを使用することもできません。」ということを意味します。

意味がわかりませんが、この問題は解決されていない。

5. プログラムがクラッシュした後のポストデバッグ: pdb.pm()

前述したように、プログラムの実行開始時にブレークポイントが挿入され、デバッグには pdb が使用されます。

プレデバッグ。実際、pdb は事後デバッグにも使用できます。つまり、プログラムにバグがありクラッシュした後、Python デバッガーを使用してそれを表示します。

たとえば、test.py には明らかにバグがあります:

# test.pydef add(n):    return n+1add("hello")
ログイン後にコピー
直接実行:

python test.py

プログラム折りたたむ:

F:\PycharmProjects\pytorch_practice>python test.py
Traceback (most recent call last):
  File "test.py", line 4, in <module>
    add("hello")
  File "test.py", line 2, in add
    return n+1
TypeError: can only concatenate str (not "int") to str</module>
ログイン後にコピー
この方法では、デバッグに pdb を使用できません。では、プログラムがクラッシュした場合、どのようにデバッグすればよいのでしょうか?

簡単なデバッグには次のコマンドを使用できます:

python -i test.py

-i オプションを使用すると、対話型シェルを開くことができます、 次のように: ###
F:\PycharmProjects\pytorch_practice>python -i test.py
Traceback (most recent call last):
  File "test.py", line 4, in <module>
    add("hello")
  File "test.py", line 2, in add
    return n+1
TypeError: can only concatenate str (not "int") to str
>>></module>
ログイン後にコピー

现在我们发现程序结束后出现了 >>> 符号,这就是python调试器。

输入命令:

import pdb pdb.pm()

其中 pdb.pm() 用于程序发生异常导致奔溃后的事后调试,可以跟踪异常程序最后的堆在信息。

执行命令后得到:

TypeError: can only concatenate str (not "int") to str
>>> import pdb
>>> pdb.pm()
> f:\pycharmprojects\pytorch_practice\test.py(2)add()
-> return n+1
(Pdb)
ログイン後にコピー

可以发现,pdb.pm() 已经追踪到了导致程序奔溃的语句:return n+1

此时可以打印 n 的值进行检查:

(Pdb) p n'hello'(Pdb) q>>> quit()

F:\PycharmProjects\pytorch_practice>
ログイン後にコピー

q 表示退出pdb调试,quit() 表示退出 python 调试器。

【相关推荐:Python3视频教程

コマンド 説明
Break または b ブレークポイントを設定します
continue または c プログラムの実行を継続します
list または l 現在の行のコード セグメントを表示します

以上がPythonデバッグツールpdb(Python Debugger)の使い方まとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Python:ゲーム、GUIなど Python:ゲーム、GUIなど Apr 13, 2025 am 12:14 AM

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

PHPとPython:2つの一般的なプログラミング言語を比較します PHPとPython:2つの一般的なプログラミング言語を比較します Apr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

Debian Readdirが他のツールと統合する方法 Debian Readdirが他のツールと統合する方法 Apr 13, 2025 am 09:42 AM

DebianシステムのReadDir関数は、ディレクトリコンテンツの読み取りに使用されるシステムコールであり、Cプログラミングでよく使用されます。この記事では、ReadDirを他のツールと統合して機能を強化する方法について説明します。方法1:C言語プログラムを最初にパイプラインと組み合わせて、cプログラムを作成してreaddir関数を呼び出して結果をinclude#include#include inctargc、char*argv []){dir*dir; structdireant*entry; if(argc!= 2){(argc!= 2){

Pythonと時間:勉強時間を最大限に活用する Pythonと時間:勉強時間を最大限に活用する Apr 14, 2025 am 12:02 AM

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

Nginx SSL証明書更新Debianチュートリアル Nginx SSL証明書更新Debianチュートリアル Apr 13, 2025 am 07:21 AM

この記事では、DebianシステムでNGINXSSL証明書を更新する方法について説明します。ステップ1:最初にCERTBOTをインストールして、システムがCERTBOTおよびPython3-Certbot-Nginxパッケージがインストールされていることを確認してください。インストールされていない場合は、次のコマンドを実行してください。sudoapt-getupdatesudoapt-getinstolcallcertbotthon3-certbot-nginxステップ2:certbotコマンドを取得して構成してlet'sencrypt証明書を取得し、let'sencryptコマンドを取得し、nginx:sudocertbot - nginxを構成します。

debian opensslでHTTPSサーバーを構成する方法 debian opensslでHTTPSサーバーを構成する方法 Apr 13, 2025 am 11:03 AM

DebianシステムでHTTPSサーバーの構成には、必要なソフトウェアのインストール、SSL証明書の生成、SSL証明書を使用するWebサーバー(ApacheやNginxなど)の構成など、いくつかのステップが含まれます。 Apachewebサーバーを使用していると仮定して、基本的なガイドです。 1.最初に必要なソフトウェアをインストールし、システムが最新であることを確認し、ApacheとOpenSSL:sudoaptupdatesudoaptupgraysudoaptinstaをインストールしてください

DebianのGitlabのプラグイン開発ガイド DebianのGitlabのプラグイン開発ガイド Apr 13, 2025 am 08:24 AM

DebianでGitLabプラグインを開発するには、特定の手順と知識が必要です。このプロセスを始めるのに役立つ基本的なガイドを以下に示します。最初にgitlabをインストールすると、debianシステムにgitlabをインストールする必要があります。 GitLabの公式インストールマニュアルを参照できます。 API統合を実行する前に、APIアクセストークンを取得すると、GitLabのAPIアクセストークンを最初に取得する必要があります。 gitlabダッシュボードを開き、ユーザー設定で「アクセストーケン」オプションを見つけ、新しいアクセストークンを生成します。生成されます

Apacheとは何ですか Apacheとは何ですか Apr 13, 2025 pm 12:06 PM

アパッチはインターネットの背後にあるヒーローです。それはWebサーバーであるだけでなく、膨大なトラフィックをサポートし、動的なコンテンツを提供する強力なプラットフォームでもあります。モジュラー設計を通じて非常に高い柔軟性を提供し、必要に応じてさまざまな機能を拡張できるようにします。ただし、モジュール性は、慎重な管理を必要とする構成とパフォーマンスの課題も提示します。 Apacheは、高度にカスタマイズ可能で複雑なニーズを満たす必要があるサーバーシナリオに適しています。

See all articles