Seperti yang saya tahu, %debug magic
bisa melakukan debug dalam satu sel.
Namun, saya memiliki panggilan fungsi di beberapa sel.
Sebagai contoh,
In[1]: def fun1(a)
def fun2(b)
# I want to set a breakpoint for the following line #
return do_some_thing_about(b)
return fun2(a)
In[2]: import multiprocessing as mp
pool=mp.Pool(processes=2)
results=pool.map(fun1, 1.0)
pool.close()
pool.join
Apa yang saya coba:
Saya mencoba mengatur
%debug
di baris pertama sel-1. Tapi itu segera masuk ke mode debug, bahkan sebelum mengeksekusi sel-2.Saya mencoba menambahkan
%debug
baris tepat sebelum kodereturn do_some_thing_about(b)
. Tapi kemudian kode berjalan selamanya, tidak pernah berhenti.
Apa cara yang benar untuk menetapkan titik putus di dalam notebook ipython?
import ipdb; ipdb.set_trace()
dalam sel notebook, tertulisMultipleInstanceError: Multiple incompatible subclass instances of TerminalIPythonApp are being created.
Anda dapat menggunakan
ipdb
jupyter dalam dengan:Edit : fungsi di atas tidak digunakan lagi sejak IPython 5.1. Ini adalah pendekatan baru:
Tambahkan di
set_trace()
mana Anda membutuhkan breakpoint. Ketikhelp
untukipdb
perintah ketika field input muncul.sumber
Tracer
disusutkan. Sekarang bekerja seperti ini:from IPython.core.debugger import set_trace
danset_trace()
membangkitkan breakpoint. Sumber: davidhamann.de/2017/04/22/debugging-jupyter-notebooksfrom IPython.core.debugger import set_trace;set_trace()
Fungsi pengembalian Anda sejalan dengan fungsi def (fungsi utama), Anda harus memberikan satu tab padanya. Dan Gunakan
dari pada
untuk men-debug seluruh sel tidak hanya baris. Semoga ini bisa membantu Anda.
sumber
Anda selalu dapat menambahkan ini di sel mana pun:
dan debugger akan berhenti di baris itu. Sebagai contoh:
sumber
ipdb
adalah refactor dari Python Debugger yang lebih terintegrasi dengan IPython.pdb
sudah terpasang.ipdb
juga dapat digunakan di luar shell ipython dan dilengkapi dengan beberapa kemudahan seperti penyelesaian tab.Di Python 3.7 Anda bisa menggunakan fungsi breakpoint () . Masuk saja
di mana pun Anda ingin runtime berhenti dan dari sana Anda dapat menggunakan perintah pdb yang sama (r, c, n, ...) atau mengevaluasi variabel Anda.
sumber
Cukup ketik
import pdb
di notebook jupyter, dan kemudian menggunakan ini cheatsheet untuk debug. Sangat nyaman.c
-> lanjutkan,s
-> langkah,b 12
-> set break point pada baris 12 dan seterusnya.sumber
pdb.set_trace()
ke tempat saya ingin menetapkan breakpoint, karenab line_no
tidak berfungsi di Notebook Jupyter dan berfungsi dengan baik di python IDLE.Setelah Anda mendapatkan kesalahan, di sel berikutnya jalankan saja
%debug
dan hanya itu.sumber
The
%pdb
perintah sihir baik untuk menggunakan juga. Katakan saja%pdb on
dan selanjutnyapdb
debugger akan berjalan di semua pengecualian, tidak peduli seberapa dalam tumpukan panggilan. Sangat berguna.Jika Anda memiliki baris tertentu yang ingin Anda debug, cukup buat pengecualian di sana (sering kali Anda sudah memilikinya!) Atau gunakan
%debug
perintah ajaib yang disarankan orang lain.sumber
Saya baru saja menemukan PixieDebugger . Meskipun saya belum sempat mengujinya, ini benar-benar cara yang paling mirip untuk men-debug seperti yang kita gunakan di ipython dengan ipdb
Ini juga memiliki tab "evaluasi"
sumber
Debugger asli tersedia sebagai ekstensi untuk JupyterLab. Dirilis beberapa minggu yang lalu, ini dapat diinstal dengan mendapatkan ekstensi yang relevan, serta kernel xeus-python (yang terutama hadir tanpa sihir yang dikenal oleh pengguna ipykernel):
Hal ini memungkinkan pengalaman debugging visual yang terkenal dari IDE lain.
Sumber: Debugger visual untuk Jupyter
sumber