Jadual Kandungan
1. Terdapat 2 cara untuk menggunakan pdb
3. Gunakan perintah putus untuk menetapkan titik putus pada lokasi yang ditentukan dalam fail yang ditentukan
3.2 Dalam lain-lain Tetapkan titik putus pada lokasi yang ditentukan dalam fail " > 3.2 Dalam lain-lain Tetapkan titik putus pada lokasi yang ditentukan dalam fail
4. Gunakan Masalah yang ditemui semasa menggunakan pdb
4.1 Apabila menggunakan pautan lembut, laluan fail yang dipaparkan oleh pdb tidak konsisten dengan laluan sebenar" >4.1 Apabila menggunakan pautan lembut, laluan fail yang dipaparkan oleh pdb tidak konsisten dengan laluan sebenar
4.2 pdb kadangkala tidak boleh menambah titik putus dalam kaedah forward() model " >4.2 pdb kadangkala tidak boleh menambah titik putus dalam kaedah forward() model
Seperti yang dinyatakan di atas, titik putus dimasukkan apabila program mula berjalan dan pdb digunakan untuk penyahpepijatan, iaitu,
Rumah pembangunan bahagian belakang Tutorial Python Ringkasan penggunaan alat penyahpepijat python pdb (Python Debugger)

Ringkasan penggunaan alat penyahpepijat python pdb (Python Debugger)

Nov 07, 2022 pm 04:46 PM
python

Artikel ini membawakan anda pengetahuan yang berkaitan tentang Python Ia terutamanya memperkenalkan kandungan yang berkaitan tentang alat penyahpepijatan pdb, termasuk perintah pdb asas, menetapkan titik putus dengan rehat, dll. Mari kita lihat bersama-sama, saya harap. ia akan membantu semua orang.

Ringkasan penggunaan alat penyahpepijat python pdb (Python Debugger)

[Cadangan berkaitan: Tutorial video Python3 ]

1. Terdapat 2 cara untuk menggunakan pdb

pdb: python debugger

1. Kaedah tidak mengganggu (Tidak perlu mengubah suai kod sumber, anda boleh nyahpepijat dengan menjalankannya terus dari baris arahan)

python3 -m pdb filename.py

2 Kaedah mengganggu (Anda perlu menambah kod berikut pada kod yang sedang dinyahpepijat dan kemudian jalankan kod seperti biasa) <.>

import pdb pdb.set_trace()

Apabila anda melihat gesaan berikut pada baris arahan, ini bermakna pdb

(Pdb)

2. perintah asas pdb

Dalam penggunaan sebenar, kami mendapati bahawa apabila menjalankan fail python dengan skrip shell, ia mungkin tidak boleh dinyahpepijat menggunakan pdb dan ia akan keluar. Pada masa ini, anda hanya boleh menjalankan fail py secara langsung untuk penyahpepijatan.

3. Gunakan perintah putus untuk menetapkan titik putus pada lokasi yang ditentukan dalam fail yang ditentukan

3.1 Tetapkan titik putus pada lokasi yang dinyatakan dalam fail ini

Sebagai contoh, dalam contoh berikut, jika anda ingin memasukkan kaedah ke hadapan() model untuk melihat proses pemprosesan data semasa perambatan ke hadapan, anda hanya boleh menetapkan rehat dalam baris pertama of forward() (line 26 Point, pdb.set_trace()

Tetapi kadangkala model ini sangat kompleks, dan menggunakan kaedah ini akan menyebabkan program melaporkan ralat dan keluar terus (saya tidak tahu sebabnya), maka kita boleh mempertimbangkan untuk menggunakan perintah break di sini Masukkan titik putus dalam satu baris supaya program akan berhenti apabila ia mencapai ke hadapan ().

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)

Kaedah khusus: (1) Pertama set pdb.set_trace() pada mana-mana baris sebelumnya untuk menghentikan program. (2) Hanya masukkan rehat 26. Seperti yang ditunjukkan dalam gambar:

Ringkasan penggunaan alat penyahpepijat python pdb (Python Debugger) Dengan cara ini, titik putus berjaya ditetapkan dan program akan berhenti apabila ia mencapai ke hadapan().

Angka 26 di sini ialah nombor baris Perlu diingat bahawa kedudukan titik putus tidak boleh menjadi ulasan Sebagai contoh, jika kita menetapkan titik putus pada baris 25 (baris ulasan), ia akan gagal:

Ringkasan penggunaan alat penyahpepijat python pdb (Python Debugger)Untuk meringkaskan, arahan untuk menetapkan titik putus dalam fail yang sama ialah:

garis putus

3.2 Dalam lain-lain Tetapkan titik putus pada lokasi yang ditentukan dalam fail

Jika titik putus yang anda ingin tetapkan tiada dalam fail larian awal, bagaimana anda boleh menggunakan arahan putus untuk menetapkan titik putus dalam fail lain? Mari lihat contoh ini:

Bahagikan kod 3.1 kepada tiga fail py dan letakkannya dalam laluan yang sama:

  ![Ringkasan penggunaan alat penyahpepijat python pdb (Python Debugger)](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4b5d476ba5b14b0ba541d78930b9704a~tplv-k3u1fbpfcp-zoom-1.image)

Lihat kandungan setiap fail:

run.py:

Tetapan pdb.set_trace() awal berada dalam 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)

enkoder.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))

Sekarang kita jalankan run.py, dan kemudian tetapkan titik putus pada baris 12 encoder.py, iaitu

untuk lapisan dalam diri.ModelList:

Arahannya ialah:

break encoder.py:12

Iaitu, break nama fail: lineRingkasan penggunaan alat penyahpepijat python pdb (Python Debugger)Kita dapat melihat bahawa atur cara boleh masuk ke hadapan() daripada output = model(input ):Ringkasan penggunaan alat penyahpepijat python pdb (Python Debugger)Ini menjadikan penyahpepijatan sangat mudah.

Jika titik putus awal dan titik putus sasaran tidak berada dalam direktori yang sama, anda juga boleh menetapkan titik putus melalui nama fail di bawah laluan relatif, seperti:

(Pdb) break ../transformer/asr_model.py:91Breakpoint 1 at /local/wenet/examples/aishell/s0/wenet/transformer/asr_model.py:91(Pdb)

4. Gunakan Masalah yang ditemui semasa menggunakan pdb

4.1 Apabila menggunakan pautan lembut, laluan fail yang dipaparkan oleh pdb tidak konsisten dengan laluan sebenar

Seperti yang boleh didapati dalam rajah , pdb terdiri daripada tiga baris Baris pertama ialah laluan fail, baris kedua ialah baris kod yang sedang dilaksanakan, dan baris ketiga ialah baris arahan input.

Apabila terdapat pautan lembut, laluan yang dipaparkan oleh pdb ialah laluan yang ditunjukkan oleh pautan lembut, tetapi laluan kod sebenar ialah laluan yang menyalin kandungan pautan lembut ini adalah berbeza, jadi anda mesti memberi perhatian. Ringkasan penggunaan alat penyahpepijat python pdb (Python Debugger)

4.2 pdb kadangkala tidak boleh menambah titik putus dalam kaedah forward() model

pdb kadangkala tidak boleh menggunakan pdb set_trace(. ) menambah titik putus pada kaedah ke hadapan() model Mesej ralat ialah:

Fungsi terkumpul tidak boleh mengambil nombor pembolehubah argumen atau menggunakan argumen kata kunci sahaja dengan lalai

mungkin bermaksud "fungsi yang disusun tidak dapat menerima bilangan parameter yang berubah-ubah, dan tidak boleh menggunakan parameter kata kunci sahaja secara lalai." tidak diselesaikan.

5. Pasca nyahpepijat selepas program ranap: pdb.pm()

Seperti yang dinyatakan di atas, titik putus dimasukkan apabila program mula berjalan dan pdb digunakan untuk penyahpepijatan, iaitu,

Nyahpepijat terlebih dahulu

. Malah, pdb juga boleh digunakan untuk penyahpepijatan bedah siasat, iaitu selepas program mengalami pepijat dan ranap, gunakan penyahpepijat python untuk melihatnya. Sebagai contoh, test.py jelas bermasalah:

Jalankan terus:
# test.pydef add(n):    return n+1add("hello")

python test.py

Ranap program:

Dengan cara ini kami tidak boleh menggunakan pdb untuk nyahpepijat. Jadi apabila program ranap, bagaimana kita harus nyahpepijatnya?
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>

Kami boleh menggunakan arahan berikut untuk penyahpepijatan mudah:

python -i test.py

Pilihan -i membolehkan anda membuka Interaktif cangkerang, seperti berikut:
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视频教程

Atas ialah kandungan terperinci Ringkasan penggunaan alat penyahpepijat python pdb (Python Debugger). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1604
276
Bagaimana cara menjalankan kod python dalam teks luhur? Bagaimana cara menjalankan kod python dalam teks luhur? Aug 16, 2025 am 04:58 AM

Pastikan Python dipasang dan ditambah ke laluan sistem, jalankan Python-versi atau Python3-pengesahan versi melalui terminal; 2. Simpan fail python sebagai lanjutan .py, seperti hello.py; 3. Buat sistem binaan tersuai dalam sublimetext, pengguna Windows menggunakan {"cmd": ["python", "-u", "$ file"]}, pengguna macOS/linux menggunakan {"cmd": ["python3

Cara debug skrip python di vscode Cara debug skrip python di vscode Aug 16, 2025 am 02:53 AM

Untuk menyahpepijat skrip python, anda perlu terlebih dahulu memasang lanjutan python dan mengkonfigurasi penterjemah, kemudian buat fail launch.json untuk menetapkan konfigurasi debugging, kemudian tetapkan titik putus dalam kod dan tekan F5 untuk memulakan debugging. Skrip akan dijeda pada titik putus, membolehkan pembolehubah pemeriksaan dan pelaksanaan langkah demi langkah. Akhirnya, dengan memeriksa masalah dengan melihat output konsol, menambah log atau menyesuaikan parameter, dan lain -lain, untuk memastikan bahawa proses debugging adalah mudah dan cekap selepas persekitaran adalah betul.

Apakah kaedah kelas dalam python Apakah kaedah kelas dalam python Aug 21, 2025 am 04:12 AM

Classmethodsinpythonareboundtotheclassandnottoinstances, membolehkanThemTobeCalledWithoutCreatingAnobject.1.theyaredefinedusingthe@Classmethoddecoratorandtakeclsasthefirstparameter, referringtotheclassitervarfe.2.TheycanCasteScess,

Bagaimana cara membuat projek python dalam teks luhur? Bagaimana cara membuat projek python dalam teks luhur? Aug 16, 2025 am 08:53 AM

InstallSublimeTextandPython,thenconfigureabuildsystembycreatingaPython3.sublime-buildfilewiththeappropriatecmdandselectorsettingstoenablerunningPythonscriptsviaCtrl B.2.OrganizeyourprojectbycreatingadedicatedfolderwithPythonfilesandsupportingdocument

contoh giliran python asyncio contoh giliran python asyncio Aug 21, 2025 am 02:13 AM

Asyncio.queue adalah alat giliran untuk komunikasi yang selamat antara tugas -tugas asynchronous. 1. Pengeluar menambah data melalui Awaitqueue.put (item), dan pengguna menggunakan Awaitqueue.get () untuk mendapatkan data; 2. Untuk setiap item yang anda proses, anda perlu memanggil giliran.task_done () untuk menunggu giliran.join () untuk menyelesaikan semua tugas; 3. Gunakan tiada sebagai isyarat akhir untuk memberitahu pengguna untuk berhenti; 4 Apabila pengguna berganda, isyarat akhir perlu dihantar atau semua tugas telah diproses sebelum membatalkan tugas; 5. Giliran menyokong menetapkan kapasiti had maksimum, meletakkan dan mendapatkan operasi secara automatik menggantung dan tidak menyekat gelung acara, dan program akhirnya melewati Canc

Bagaimana kata kunci hasil berfungsi di python Bagaimana kata kunci hasil berfungsi di python Aug 15, 2025 am 08:23 AM

Kata kunci hasil digunakan untuk menentukan fungsi penjana, supaya ia dapat menjeda pelaksanaan dan mengembalikan nilai satu demi satu, dan kemudian pulih dari jeda; Fungsi Generator mengembalikan objek penjana, mempunyai ciri -ciri penilaian malas, dan dapat menyelamatkan ingatan. Ia sesuai untuk mengendalikan senario seperti fail besar, data streaming, dan urutan tak terhingga. Penjana adalah iterator yang menyokong seterusnya () dan untuk gelung, tetapi tidak boleh digulingkan dan mesti dicipta semula untuk berulang lagi.

Bagaimana cara menjalankan skrip python dan melihat output dalam panel berasingan dalam teks luhur? Bagaimana cara menjalankan skrip python dan melihat output dalam panel berasingan dalam teks luhur? Aug 17, 2025 am 06:06 AM

ToseepythonoutputinaseparatePanelinsublimetext, usethebuilt-inbuildsystembysavingyourfilewitha.pyextensionAndpressingctrl b (orcmd b) .2.ensurethecorrectbuSelectedByGyGyGyGyToToToToToToToToToToToToToToToToToToToToToToToToToToToToToToToToToToToStoToToToToToToToToToToToToToSTORS

Bagaimana untuk mengelakkan disekat semasa mengikis web dengan Python? Bagaimana untuk mengelakkan disekat semasa mengikis web dengan Python? Aug 16, 2025 am 09:54 AM

Toavoidgettingblockedwhilewebscrapingwithpython, usereAlisticRequestheaders, addrandomizeddelays, rotateipaddresseswithproxies, containsessions, hormatrobots.txt, anduseheadlessbrowsersshennerary, memastikanShicealhaviaviortommi

See all articles