Dalam Python, bagaimana saya bisa mencetak tumpukan panggilan saat ini dari dalam suatu metode (untuk tujuan debugging).
python
debugging
stack-trace
diri
sumber
sumber
sys._current_frames()
. Misalnya py_better_exchookdump_all_thread_tracebacks
melakukan itu (penafian: saya menulis itu).sumber
traceback.print_exc()
yang memberi Anda hal yang hampir sama dengan yang Anda dapatkan tanpaexcept
pernyataan (dan juga lebih sedikit coding daripada jawaban yang diterima).traceback.print_exc()
mencetak jejak tumpukan untuk pengecualian apa pun yang mungkin Anda tangani - tetapi ini tidak menyelesaikan pertanyaan awal, yaitu bagaimana cara mencetak tumpukan saat ini ("di mana Anda sekarang" sebagai lawan "di mana kode Anda berada saat pengecualian terakhir terjadi off, jika ada ".)inspect.stack()
mengembalikan tumpukan saat ini daripada traceback pengecualian:Lihat https://gist.github.com/FredLoney/5454553 untuk fungsi utilitas log_stack.
sumber
Jika Anda menggunakan python debugger, tidak hanya variabel interaktif penyelidikan tetapi Anda bisa mendapatkan tumpukan panggilan dengan perintah "where" atau "w".
Jadi di bagian atas program Anda
Kemudian dalam kode tempat Anda ingin melihat apa yang terjadi
dan Anda masuk ke prompt
sumber
where
?(pdb)
ketik sajawhere
dan itu akan mencetak jejak tumpukan ke terminal.breakpoint()
yang meniadakan kebutuhan untuk mengimpor pdb.bagi mereka yang perlu mencetak tumpukan panggilan saat menggunakan pdb, lakukan saja
sumber
Berikut variasi jawaban istimewa dari RichieHindle yang mengimplementasikan dekorator yang dapat diterapkan secara selektif ke fungsi yang diinginkan. Bekerja dengan Python 2.7.14 dan 3.6.4.
Output dari sampel:
sumber
Instal Inspect-it
Kode
Anda dapat membuat cuplikan dari baris ini
itu akan menunjukkan kepada Anda daftar tumpukan panggilan fungsi dengan nama file dan nomor baris
daftar dari awal ke tempat Anda meletakkan baris ini
sumber