Jadual Kandungan
Ikhtisar
Ciri
Rumah pembangunan bahagian belakang Tutorial Python Menyahpepijat Penyelamat! Memanfaatkan ObjWatch untuk Pemahaman Kod dan Nyahpepijat yang Cekap dalam Projek Python Kompleks

Menyahpepijat Penyelamat! Memanfaatkan ObjWatch untuk Pemahaman Kod dan Nyahpepijat yang Cekap dalam Projek Python Kompleks

Jan 06, 2025 am 02:43 AM

Pautan Kod Sumber

Debugging Savior! Leveraging ObjWatch for Efficient Code Comprehension and Debugging in Complex Python Projects aeeeeeep / objwatch

?️ ObjWatch ialah perpustakaan Python untuk mengesan dan memantau atribut objek dan panggilan kaedah.

ObjTonton

Debugging Savior! Leveraging ObjWatch for Efficient Code Comprehension and Debugging in Complex Python Projects Debugging Savior! Leveraging ObjWatch for Efficient Code Comprehension and Debugging in Complex Python Projects Debugging Savior! Leveraging ObjWatch for Efficient Code Comprehension and Debugging in Complex Python Projects Debugging Savior! Leveraging ObjWatch for Efficient Code Comprehension and Debugging in Complex Python Projects Debugging Savior! Leveraging ObjWatch for Efficient Code Comprehension and Debugging in Complex Python Projects

[ Bahasa Inggeris | 中文 ]

Ikhtisar

ObjWatch ialah perpustakaan Python teguh yang direka untuk menyelaraskan penyahpepijatan dan pemantauan projek yang kompleks. Dengan menawarkan pengesanan masa nyata atribut objek dan panggilan kaedah, ObjWatch memperkasakan pembangun untuk mendapatkan cerapan yang lebih mendalam tentang pangkalan kod mereka, memudahkan pengenalpastian isu, pengoptimuman prestasi dan peningkatan kualiti kod keseluruhan.

⚠️ Amaran Prestasi

ObjWatch mungkin memberi kesan kepada prestasi aplikasi anda. Adalah disyorkan untuk menggunakannya semata-mata dalam persekitaran penyahpepijatan.

Ciri

  • Pengesanan Struktur Bersarang: Visualisasikan dan pantau panggilan fungsi bersarang dan interaksi objek dengan pengelogan berhierarki yang jelas.

  • Sokongan Pengelogan Dipertingkat: Manfaatkan modul pengelogan terbina dalam Python untuk output log berstruktur dan boleh disesuaikan, termasuk sokongan untuk format ringkas dan terperinci. Selain itu, untuk memastikan log ditangkap walaupun pembalak dilumpuhkan atau dialih keluar oleh perpustakaan luaran, anda boleh menetapkan level="force". Apabila tahap ditetapkan kepada "paksa", ObjWatch memintas pengendali pembalakan standard dan menggunakan print() untuk…

Lihat di GitHub

Titik Sakit Penyahpepijatan Semasa

Apabila membaca dan menyahpepijat projek yang kompleks, adalah perkara biasa untuk menghadapi panggilan bersarang dengan sehingga sedozen lapisan, menjadikannya sukar untuk menentukan susunan pelaksanaan. Aspek yang paling mengecewakan ialah penyahpepijatan dalam persekitaran berbilang proses; penyahpepijatan satu proses sering menyebabkan proses lain menunggu dan tamat masa, memerlukan program penyahpepijatan dimulakan semula secara berterusan. Menggunakan kenyataan cetakan kerap mengakibatkan panggilan fungsi terlepas, yang memakan masa dan menyusahkan. Pada masa ini, belum ada pustaka penyahpepijatan yang menggabungkan kesederhanaan dan kelengkapan, jadi saya menghabiskan hujung minggu membangunkan alat yang menangani masalah kesakitan ini.

Apa itu ObjWatch?

ObjWatch direka khusus untuk memudahkan penyahpepijatan dan pemantauan projek yang kompleks. Ia menyediakan penjejakan masa nyata bagi sifat objek dan panggilan kaedah, serta membenarkan cangkuk tersuai untuk membantu pembangun memperoleh cerapan yang lebih mendalam tentang pangkalan kod.

Contoh Penggunaan Pantas

Anda boleh memasangnya terus menggunakan pip install objwatch. Untuk tujuan demonstrasi, anda perlu mengklonkan kod sumber:

git clone https://github.com/aeeeeeep/objwatch
cd objwatch
pip install .
python3 examples/example_usage.py
Salin selepas log masuk
Salin selepas log masuk

Melaksanakan kod di atas akan menghasilkan maklumat panggilan berikut:

[2025-01-04 19:15:13] [DEBUG] objwatch: Processed targets:
>>>>>>>>>>
examples/example_usage.py
<<<<<<<<<<
[2025-01-04 19:15:13] [WARNING] objwatch: wrapper 'BaseLogger' loaded
[2025-01-04 19:15:13] [INFO] objwatch: Starting ObjWatch tracing.
[2025-01-04 19:15:13] [INFO] objwatch: Starting tracing.
[2025-01-04 19:15:13] [DEBUG] objwatch: run main <-
[2025-01-04 19:15:13] [DEBUG] objwatch: | run SampleClass.__init__ <- '0':(type)SampleClass, '1':10
[2025-01-04 19:15:13] [DEBUG] objwatch: | end SampleClass.__init__ -> None
[2025-01-04 19:15:13] [DEBUG] objwatch: | run SampleClass.increment <- '0':(type)SampleClass
[2025-01-04 19:15:13] [DEBUG] objwatch: | | upd SampleClass.value None -> 10
[2025-01-04 19:15:13] [DEBUG] objwatch: | | upd SampleClass.value 10 -> 11
[2025-01-04 19:15:13] [DEBUG] objwatch: | end SampleClass.increment -> None
[2025-01-04 19:15:13] [DEBUG] objwatch: | run SampleClass.increment <- '0':(type)SampleClass
[2025-01-04 19:15:13] [DEBUG] objwatch: | | upd SampleClass.value 11 -> 12
[2025-01-04 19:15:13] [DEBUG] objwatch: | end SampleClass.increment -> None
[2025-01-04 19:15:13] [DEBUG] objwatch: | run SampleClass.increment <- '0':(type)SampleClass
[2025-01-04 19:15:13] [DEBUG] objwatch: | | upd SampleClass.value 12 -> 13
[2025-01-04 19:15:13] [DEBUG] objwatch: | end SampleClass.increment -> None
[2025-01-04 19:15:13] [DEBUG] objwatch: | run SampleClass.increment <- '0':(type)SampleClass
[2025-01-04 19:15:13] [DEBUG] objwatch: | | upd SampleClass.value 13 -> 14
[2025-01-04 19:15:13] [DEBUG] objwatch: | end SampleClass.increment -> None
[2025-01-04 19:15:13] [DEBUG] objwatch: | run SampleClass.increment <- '0':(type)SampleClass
[2025-01-04 19:15:13] [DEBUG] objwatch: | | upd SampleClass.value 14 -> 15
[2025-01-04 19:15:13] [DEBUG] objwatch: | end SampleClass.increment -> None
[2025-01-04 19:15:13] [DEBUG] objwatch: | run SampleClass.decrement <- '0':(type)SampleClass
[2025-01-04 19:15:13] [DEBUG] objwatch: | | upd SampleClass.value 15 -> 14
[2025-01-04 19:15:13] [DEBUG] objwatch: | end SampleClass.decrement -> None
[2025-01-04 19:15:13] [DEBUG] objwatch: | run SampleClass.decrement <- '0':(type)SampleClass
[2025-01-04 19:15:13] [DEBUG] objwatch: | | upd SampleClass.value 14 -> 13
[2025-01-04 19:15:13] [DEBUG] objwatch: | end SampleClass.decrement -> None
[2025-01-04 19:15:13] [DEBUG] objwatch: | run SampleClass.decrement <- '0':(type)SampleClass
[2025-01-04 19:15:13] [DEBUG] objwatch: | | upd SampleClass.value 13 -> 12
[2025-01-04 19:15:13] [DEBUG] objwatch: | end SampleClass.decrement -> None
[2025-01-04 19:15:13] [DEBUG] objwatch: end main -> None
[2025-01-04 19:15:13] [INFO] objwatch: Stopping ObjWatch tracing.
[2025-01-04 19:15:13] [INFO] objwatch: Stopping tracing.
Salin selepas log masuk

Bahagian kod yang paling penting ialah yang berikut:

# Using as a Context Manager with Detailed Logging
with objwatch.ObjWatch(['examples/example_usage.py']):
    main()

# Using the API with Simple Logging
obj_watch = objwatch.watch(['examples/example_usage.py'])
main()
obj_watch.stop()
Salin selepas log masuk

Kami boleh menggunakan alat ini melalui pengurus konteks dan melalui panggilan API. Dalam contoh, kami menentukan penjejakan untuk fail examples/example_usage.py, bermakna sebarang fungsi, kaedah atau pembolehubah dalam examples/example_usage.py akan dilog oleh alat tersebut. Pengelogan hierarki yang jelas ini membantu menggambarkan dan memantau panggilan fungsi bersarang dan interaksi objek. Log yang dicetak termasuk jenis pelaksanaan berikut:

  • run: Menunjukkan permulaan pelaksanaan fungsi atau kaedah kelas.
  • tamat: Menandakan tamatnya fungsi atau pelaksanaan kaedah kelas.
  • kemas kini: Mewakili penciptaan pembolehubah baharu.
  • apd: Menandakan penambahan elemen pada struktur data seperti senarai, set atau kamus.
  • pop: Menandai pengalihan keluar elemen daripada struktur data seperti senarai, set atau kamus.

Contohnya agak mudah, tetapi fungsi ini akan sangat berguna untuk melaksanakan projek berskala besar.

Ciri-ciri Keseluruhan

ObjWatch menyediakan antara muka berikut:

  • sasaran (senarai): Fail atau modul untuk dipantau.
  • exclude_targets (senarai, pilihan): Fail atau modul untuk dikecualikan daripada pemantauan.
  • pangkat (senarai, pilihan): Kedudukan GPU untuk dijejaki apabila menggunakan torch.distributed.
  • output (str, pilihan): Laluan ke fail untuk menulis log.
  • output_xml (str, pilihan): Laluan ke fail XML untuk menulis log berstruktur. Jika dinyatakan, maklumat pengesanan akan disimpan dalam format XML bersarang untuk penyemakan imbas dan analisis yang mudah.
  • peringkat (str, pilihan): Tahap pengelogan (cth., pengelogan.DEBUG, pengelogan.INFO, paksa dll.).
  • ringkas (bool, pilihan): Dayakan mod pengelogan ringkas dengan format "DEBUG: {msg}".
  • pembalut (FunctionWrapper, pilihan): Pembalut tersuai untuk melanjutkan fungsi pengesanan dan pengelogan.
  • with_locals (bool, pilihan): Dayakan pengesanan dan pengelogan pembolehubah setempat dalam fungsi semasa pelaksanaannya.
  • with_module_path (bool, pilihan): Kawal sama ada untuk menambah laluan modul kepada nama fungsi dalam log.

Ciri Utama: Sambungan Pembalut Tersuai

ObjWatch menyediakan kelas asas abstrak FunctionWrapper, membenarkan pengguna membuat pembungkus tersuai untuk melanjutkan dan menyesuaikan fungsi penjejakan dan pengelogan perpustakaan. Dengan mewarisi daripada FunctionWrapper, pembangun boleh melaksanakan gelagat tersuai yang disesuaikan dengan keperluan projek tertentu. Tingkah laku ini akan dilaksanakan semasa panggilan fungsi dan pemulangan, memberikan pemantauan yang lebih profesional.

Kelas FunctionWrapper

Kelas FunctionWrapper mentakrifkan dua kaedah teras yang mesti dilaksanakan:

  • wrap_call(self, func_name: str, frame: FrameType) -> str:

Kaedah ini digunakan pada permulaan panggilan fungsi. Ia menerima nama fungsi dan objek bingkai semasa, yang mengandungi konteks pelaksanaan, termasuk pembolehubah tempatan dan timbunan panggilan. Laksanakan kaedah ini untuk mengekstrak, log atau mengubah suai maklumat sebelum fungsi dilaksanakan.

  • wrap_return(self, func_name: str, result: Any) -> str:

Kaedah ini dipanggil semasa pengembalian fungsi. Ia menerima nama fungsi dan hasil yang dikembalikan oleh fungsi. Gunakan kaedah ini untuk log, menganalisis atau mengubah maklumat selepas fungsi selesai dilaksanakan.

  • wrap_upd(self, old_value: Mana-mana, current_value: Mana-mana) -> Tuple[str, str]:

Kaedah ini dicetuskan apabila pembolehubah dikemas kini, menerima nilai lama dan nilai semasa. Ia boleh digunakan untuk mengelog perubahan pada pembolehubah, membenarkan penjejakan dan penyahpepijatan peralihan keadaan berubah.

Untuk butiran lanjut tentang objek bingkai, rujuk dokumentasi rasmi Python.

TensorShapeLogger

Ini ialah contoh pembungkus tersuai yang saya laksanakan berdasarkan senario penggunaan saya. Kod tersebut terdapat dalam fail objwatch/wrappers.py. Pembalut ini secara automatik merekodkan bentuk tensor input dan output dalam semua panggilan kaedah fungsi dalam modul yang ditentukan, serta keadaan pembolehubah. Ini amat berguna untuk memahami logik pelaksanaan rangka kerja teragih yang kompleks.

git clone https://github.com/aeeeeeep/objwatch
cd objwatch
pip install .
python3 examples/example_usage.py
Salin selepas log masuk
Salin selepas log masuk

Dalam projek pembelajaran mendalam, bentuk dan dimensi tensor adalah penting. Ralat dimensi kecil boleh menghalang keseluruhan model daripada melatih atau meramal dengan betul. Memeriksa bentuk setiap tensor secara manual adalah membosankan dan mudah ralat. TensorShapeLogger mengautomasikan rakaman bentuk tensor, membantu pembangun untuk:

  • Kenal pasti isu ketidakpadanan dimensi dengan cepat: Merekod maklumat bentuk secara automatik untuk mengesan dan membetulkan ralat dimensi dengan segera.
  • Optimumkan seni bina model: Dengan menjejaki perubahan dalam bentuk tensor, optimumkan struktur rangkaian untuk meningkatkan prestasi model.
  • Tingkatkan kecekapan penyahpepijatan: Kurangkan masa yang dihabiskan untuk menyemak bentuk tensor secara manual, membenarkan tumpuan pada pembangunan model teras.

Contoh Penggunaan Pembungkus Tersuai

Adalah disyorkan untuk merujuk kepada fail tests/test_torch_train.py. Fail ini mengandungi contoh lengkap proses latihan PyTorch, menunjukkan cara mengintegrasikan ObjWatch untuk pemantauan dan pengelogan.

Nota

⚠️ Amaran Prestasi
ObjWatch boleh memberi kesan kepada prestasi program anda apabila digunakan dalam persekitaran penyahpepijatan. Oleh itu, adalah disyorkan untuk menggunakannya hanya semasa fasa nyahpepijat dan pembangunan.

Ini hanyalah penulisan awal; Saya bercadang untuk menambah lagi dari semasa ke semasa. Jika anda rasa ia berguna, sila berikan bintang.

Perpustakaan masih aktif dikemas kini. Jika anda mempunyai sebarang soalan atau cadangan, sila tinggalkan komen atau buka isu dalam repositori.

Atas ialah kandungan terperinci Menyahpepijat Penyelamat! Memanfaatkan ObjWatch untuk Pemahaman Kod dan Nyahpepijat yang Cekap dalam Projek Python Kompleks. 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

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.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

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!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

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 Java
1666
14
Tutorial PHP
1273
29
Tutorial C#
1253
24
Python: Permainan, GUI, dan banyak lagi Python: Permainan, GUI, dan banyak lagi Apr 13, 2025 am 12:14 AM

Python cemerlang dalam permainan dan pembangunan GUI. 1) Pembangunan permainan menggunakan pygame, menyediakan lukisan, audio dan fungsi lain, yang sesuai untuk membuat permainan 2D. 2) Pembangunan GUI boleh memilih tkinter atau pyqt. TKInter adalah mudah dan mudah digunakan, PYQT mempunyai fungsi yang kaya dan sesuai untuk pembangunan profesional.

Python vs C: Lengkung pembelajaran dan kemudahan penggunaan Python vs C: Lengkung pembelajaran dan kemudahan penggunaan Apr 19, 2025 am 12:20 AM

Python lebih mudah dipelajari dan digunakan, manakala C lebih kuat tetapi kompleks. 1. Sintaks Python adalah ringkas dan sesuai untuk pemula. Penaipan dinamik dan pengurusan memori automatik menjadikannya mudah digunakan, tetapi boleh menyebabkan kesilapan runtime. 2.C menyediakan kawalan peringkat rendah dan ciri-ciri canggih, sesuai untuk aplikasi berprestasi tinggi, tetapi mempunyai ambang pembelajaran yang tinggi dan memerlukan memori manual dan pengurusan keselamatan jenis.

Python dan Masa: Memanfaatkan masa belajar anda Python dan Masa: Memanfaatkan masa belajar anda Apr 14, 2025 am 12:02 AM

Untuk memaksimumkan kecekapan pembelajaran Python dalam masa yang terhad, anda boleh menggunakan modul, masa, dan modul Python. 1. Modul DateTime digunakan untuk merakam dan merancang masa pembelajaran. 2. Modul Masa membantu menetapkan kajian dan masa rehat. 3. Modul Jadual secara automatik mengatur tugas pembelajaran mingguan.

Python vs C: Meneroka Prestasi dan Kecekapan Python vs C: Meneroka Prestasi dan Kecekapan Apr 18, 2025 am 12:20 AM

Python lebih baik daripada C dalam kecekapan pembangunan, tetapi C lebih tinggi dalam prestasi pelaksanaan. 1. Sintaks ringkas Python dan perpustakaan yang kaya meningkatkan kecekapan pembangunan. 2. Ciri-ciri jenis kompilasi dan kawalan perkakasan meningkatkan prestasi pelaksanaan. Apabila membuat pilihan, anda perlu menimbang kelajuan pembangunan dan kecekapan pelaksanaan berdasarkan keperluan projek.

Yang merupakan sebahagian daripada Perpustakaan Standard Python: Senarai atau Array? Yang merupakan sebahagian daripada Perpustakaan Standard Python: Senarai atau Array? Apr 27, 2025 am 12:03 AM

Pythonlistsarepartofthestandardlibrary, sementara

Python: Automasi, skrip, dan pengurusan tugas Python: Automasi, skrip, dan pengurusan tugas Apr 16, 2025 am 12:14 AM

Python cemerlang dalam automasi, skrip, dan pengurusan tugas. 1) Automasi: Sandaran fail direalisasikan melalui perpustakaan standard seperti OS dan Shutil. 2) Penulisan Skrip: Gunakan Perpustakaan Psutil untuk memantau sumber sistem. 3) Pengurusan Tugas: Gunakan perpustakaan jadual untuk menjadualkan tugas. Kemudahan penggunaan Python dan sokongan perpustakaan yang kaya menjadikannya alat pilihan di kawasan ini.

Pembelajaran Python: Adakah 2 jam kajian harian mencukupi? Pembelajaran Python: Adakah 2 jam kajian harian mencukupi? Apr 18, 2025 am 12:22 AM

Adakah cukup untuk belajar Python selama dua jam sehari? Ia bergantung pada matlamat dan kaedah pembelajaran anda. 1) Membangunkan pelan pembelajaran yang jelas, 2) Pilih sumber dan kaedah pembelajaran yang sesuai, 3) mengamalkan dan mengkaji semula dan menyatukan amalan tangan dan mengkaji semula dan menyatukan, dan anda secara beransur-ansur boleh menguasai pengetahuan asas dan fungsi lanjutan Python dalam tempoh ini.

Python vs C: Memahami perbezaan utama Python vs C: Memahami perbezaan utama Apr 21, 2025 am 12:18 AM

Python dan C masing -masing mempunyai kelebihan sendiri, dan pilihannya harus berdasarkan keperluan projek. 1) Python sesuai untuk pembangunan pesat dan pemprosesan data kerana sintaks ringkas dan menaip dinamik. 2) C sesuai untuk prestasi tinggi dan pengaturcaraan sistem kerana menaip statik dan pengurusan memori manual.

See all articles