Bagikan melalui


Menentukan Modul dan Pemilik Fungsi

Ekstensi !analyze dan !owner menggunakan file yang diberi nama triage.ini untuk menentukan pemilik simbol yang ditemui debugger.

Saat Anda menggunakan ekstensi ini, identitas fungsi atau pemilik modul ditampilkan setelah kata "Tindak Lanjut".

File triage.ini adalah file teks yang berada di subdirektori \triase alat debugging Anda untuk penginstalan Windows. Sampel file triage.ini disertakan sebagai bagian dari paket Alat Penelusuran Kesalahan untuk Windows.

Peringatan Jika Anda menginstal versi terbaru Alat Penelusuran Kesalahan untuk Windows di direktori yang sama dengan versi saat ini, itu menimpa semua file di direktori tersebut, termasuk triage.ini. Setelah Anda mengubah atau mengganti sampel file triage.ini, simpan salinannya ke direktori lain. Setelah menginstal ulang debugger, Anda dapat menyalin triage.ini yang disimpan melalui versi default.

Format of the triage.ini File

Meskipun file triage.ini dimaksudkan untuk membantu Anda menentukan pemilik fungsi yang telah dipecah menjadi debugger, string "pemilik" dalam file ini bisa menjadi apa pun yang mungkin membantu Anda melakukan debugging. String dapat menjadi nama orang yang menulis atau memelihara kode. Atau, string dapat menjadi instruksi singkat tentang apa yang dapat Anda lakukan ketika kesalahan terjadi dalam modul atau fungsi.

Setiap baris dalam file ini memiliki sintaks berikut.

Module[!Function]=Owner 

Anda hanya dapat menambahkan tanda bintang (*) di akhir modul atau nama fungsi. Jika muncul di tempat lain, itu ditafsirkan sebagai karakter harfiah.

Anda tidak dapat menambahkan spasi dalam string pemilik. Jika spasi ada dalam string pemilik, spasi akan diabaikan.

Untuk informasi selengkapnya tentang opsi sintaksis, lihat Sintaks triage.ini Khusus.

Contoh berikut menunjukkan contoh file triage.ini.

module1=Person1
module2!functionA=Person2
module2!functionB=Person3
module2!funct*=Person4
module2!*=Person5
module3!singleFunction=Person6
mod*!functionC=Person7

Triage.ini dan !owner

Saat Anda meneruskan modul atau nama fungsi ke ekstensi !owner , debugger menampilkan kata "Followup" diikuti dengan nama modul atau pemilik fungsi.

Contoh berikut menggunakan sampel sebelumnya triage.ini file.

0:000> !owner module2!functionB
Followup:  Person3

Menurut file, "Person3" memiliki module2!functionB, dan "Person4" memiliki module2!funct\. Kedua string ini cocok dengan argumen yang diteruskan ke !owner, sehingga kecocokan yang lebih lengkap digunakan.

Triage.ini dan !analyze

Ketika Anda menggunakan ekstensi !analyze , debugger melihat bingkai kesalahan atas di tumpukan dan mencoba menentukan pemilik modul dan fungsi dalam bingkai ini. Jika debugger dapat menentukan pemilik, informasi pemilik ditampilkan.

Jika debugger tidak dapat menentukan pemilik, debugger meneruskan ke bingkai tumpukan berikutnya, dan seterusnya, sampai debugger menentukan pemilik atau tumpukan benar-benar diperiksa.

Jika debugger dapat menentukan pemilik, nama pemilik ditampilkan setelah kata "Tindak Lanjut". Jika debugger mencari seluruh tumpukan tanpa menemukan informasi apa pun, tidak ada nama yang ditampilkan.

Contoh berikut menggunakan contoh file triage.ini yang diberikan sebelumnya dalam topik ini.

Misalkan bingkai pertama pada tumpukan adalah MyModule!someFunction. Debugger tidak menemukan MyModule dalam file triage.ini. Selanjutnya, berlanjut ke bingkai kedua pada tumpukan.

Misalkan bingkai kedua adalah module3!anotherFunction. Debugger memang melihat entri untuk modul3, tetapi tidak ada kecocokan untuk anotherFunction dalam modul ini. Selanjutnya, debugger berlanjut ke bingkai ketiga.

Misalkan bingkai ketiga adalah module2!functionC. Debugger pertama kali mencari kecocokan yang tepat, tetapi kecocokan seperti itu tidak ada. Debugger kemudian memangkas nama fungsi dan menemukan module2!funct\* di triage.ini. Kecocokan ini mengakhiri pencarian, karena debugger menentukan bahwa pemiliknya adalah "Person4".

Debugger kemudian menampilkan output yang mirip dengan contoh berikut.

0:000> !analyze
*******************************************************************************
*                                                                             *
*                        Exception Analysis                                   *
*                                                                             *
*******************************************************************************

Use !analyze -v to get detailed debugging information.

Probably caused by : module2 ( module2!functionC+15a )

Followup: Person4
---------

Pertandingan yang lebih lengkap lebih diutamakan daripada pertandingan yang lebih pendek. Namun, kecocokan nama modul selalu lebih disukai daripada kecocokan nama fungsi. Jika module2!funct\* belum ada dalam file triage.ini ini, debugger akan memilih modul2!\* sebagai kecocokan. Dan jika module2!funct\* dan module2!\* dihapus, mod*!functionC akan dipilih.

Sintaks triage.ini Khusus

Jika Anda menghilangkan tanda seru dan nama fungsi atau menambahkan !\* setelah nama modul, semua fungsi dalam modul tersebut ditunjukkan. Jika fungsi dalam modul ini juga ditentukan secara terpisah, spesifikasi yang lebih tepat lebih diutamakan.

Jika Anda menggunakan "default" sebagai nama modul atau nama fungsi, nama tersebut setara dengan karakter kartubebas. Misalnya, nt!\* sama dengan nt!default, dan defaultnya sama dengan *!\*.

Jika kecocokan dibuat, tetapi kata abaikan muncul di sebelah kanan tanda sama dengan (=), debugger berlanjut ke bingkai berikutnya dalam tumpukan.

Anda dapat menambahkan last_ atau maybe_ sebelum nama pemilik. Awalan ini memberi pemilik lebih sedikit prioritas saat Anda menjalankan !analyze. Debugger memilih kecocokan pasti yang lebih rendah pada tumpukan di atas kecocokan maybe_ yang lebih tinggi pada tumpukan. Debugger juga memilih kecocokan maybe_ yang lebih rendah pada tumpukan di atas kecocokan last_ yang lebih tinggi pada tumpukan.

Contoh triage.ini

Contoh templat triage.ini disertakan dalam paket Alat Penelusuran Kesalahan untuk Windows. Anda dapat menambahkan pemilik modul dan fungsi apa pun yang Anda inginkan ke file ini. Jika Anda tidak ingin memiliki default global, hapus baris default=MachineOwner di awal file ini.