Bagikan melalui


Pengelogan Tumpukan dan Pembuangan

Menggunakan sakelar /stacktraceonerror dan /minidumponerror

Ada dua cara untuk menangkap jejak tumpukan dan mini dump dari pengujian Anda. Yang paling mudah adalah mode 'onerror'. Saat Anda menjalankan pengujian, berikan sakelar '/stacktraceonerror' dan/atau '/minidumponerror'. Kemudian, jika Anda mengalami kegagalan, Pencatat akan mengambil jejak tumpukan dan/atau mini dump untuk Anda dalam format default.

Metode lain untuk menangkap jejak tumpukan dan cadangan mini adalah dengan menggunakan API yang dijelaskan di bawah ini.

Menggunakan fungsionalitas WexDebug.h untuk menangkap jejak tumpukan dan cadangan mini

WexDebug.h menyediakan API untuk menangkap jejak tumpukan panggilan dan cadangan mini.

Panggil SaveDump API untuk menyimpan cadangan mini.

API ini mengambil parameter DWORD opsional (yang merupakan bendera jenis cadangan atau kombinasi bendera) dan referensi string di mana ia mengembalikan string yang berisi nama file dan jalur ke file cadangan yang disimpan. Nama file secara otomatis dihasilkan oleh API dan didasarkan pada tanggal dan waktu saat ini.

Parameter jenis cadangan opsional menentukan apa yang harus dimuat oleh cadangan mini yang diambil. Ini juga menentukan apakah cadangan akan disimpan dalam file dmp atau kabin, dan, dalam kasus file taksi, apakah simbol akan disimpan bersama dengan cadangan. Jika parameter opsional dihilangkan, pengaturan default akan digunakan.

Contoh (simpan cadangan ke dalam taksi bersama dengan pdb-nya):

NoThrowString savedDumpFilePath;
HRESULT hr = Debug::SaveDump(MiniDumpFormat::WriteCab | MiniDumpFormat::WriteCabSecondaryFiles, savedDumpFilePath);

Perhatikan bahwa menyimpan cadangan ke dalam file taksi membutuhkan waktu lebih lama daripada menyimpan cadangan biasa; melampirkan file simbol membutuhkan waktu lebih lama.

Panggil GetStack API untuk mendapatkan jejak tumpukan panggilan.

API ini mengambil parameter DWORD opsional (yang merupakan bendera jenis atau kombinasi bendera) dan referensi string di mana ia mengembalikan string yang berisi jejak tumpukan panggilan untuk konteks saat ini.

Parameter jenis tumpukan opsional menentukan apa yang harus dimuat pelacakan tumpukan. Jika parameter opsional dihilangkan, pengaturan default akan digunakan.

Contoh:

NoThrowString stackText;
HRESULT hr = Debug::GetStack(CallStackFormat::ColumnNames | CallStackFormat::FrameAddress |
                             CallStackFormat::SourceLine, stackText);

Korelasi bendera opsi tumpukan untuk perintah debugger. Jika Anda menggunakan keluarga debugger windbg, perkiraan daftar korelasi berikut mungkin berguna:

Sintaks Debugger Bendera Terkait
k CallStackFormat::ColumnNames
Kv k + CallStackFormat::FunctionInfo
kp / kP k + CallStackFormat::P arameters
kn k + CallStackFormat::FrameNumbers
Kf k + CallStackFormat::FrameMemoryUsage

Referensi Teknis

Jika Anda tertarik dengan informasi lebih lanjut tentang parameter opsional cadangan dan tumpukan, lihat dokumentasi yang disediakan dengan Alat Debugging untuk Windows. Untuk dokumentasi tentang 'bendera cadangan' lihat DEBUG_FORMAT_XXX. Untuk dokumentasi tentang 'bendera tumpukan' silakan lihat OutputStackTrace.