Bagikan melalui


Fungsi StackSnapshotCallback

Menyediakan profiler dengan informasi tentang setiap bingkai terkelola dan setiap eksekusi bingkai yang tidak terkelola pada tumpukan selama proses penumpukan, yang dimulai oleh metode ICorProfilerInfo2::DoStackSnapshot.

Sintaks

HRESULT __stdcall StackSnapshotCallback (  
    [in] FunctionID funcId,  
    [in] UINT_PTR ip,  
    [in] COR_PRF_FRAME_INFO frameInfo,  
    [in] ULONG32 contextSize,  
    [in] BYTE context[],  
    [in] void *clientData  
);  

Parameter

funcId
[in] Jika nilai ini nol, panggilan balik ini untuk menjalankan bingkai yang tidak terkelola; jika tidak, ini adalah pengidentifikasi fungsi terkelola dan panggilan balik ini untuk bingkai terkelola.

ip
[in] Nilai penunjuk instruksi kode asli dalam bingkai.

frameInfo
[in] Nilai COR_PRF_FRAME_INFO yang mereferensikan informasi tentang bingkai tumpukan. Nilai ini hanya berlaku untuk digunakan selama panggilan balik ini.

contextSize
[in] Ukuran struktur CONTEXT, yang dirujuk oleh parameter context.

context
[in] Penunjuk ke struktur CONTEXT Win32 yang mewakili keadaan CPU untuk bingkai ini.

Parameter context hanya valid jika bendera COR_PRF_SNAPSHOT_CONTEXT diteruskan dalam ICorProfilerInfo2::DoStackSnapshot.

clientData
[in] Penunjuk ke data klien, yang diteruskan langsung dari ICorProfilerInfo2::DoStackSnapshot.

Keterangan

Fungsi StackSnapshotCallback diterapkan oleh penulis profiler. Anda harus membatasi kompleksitas pekerjaan yang dilakukan di StackSnapshotCallback. Misalnya, saat menggunakan ICorProfilerInfo2::DoStackSnapshot dengan cara asinkron, utas target mungkin memegang kunci. Jika kode di dalam StackSnapshotCallback memerlukan kunci yang sama, kebuntuan dapat terjadi.

Metode ICorProfilerInfo2::DoStackSnapshot memanggil fungsi StackSnapshotCallback sekali per bingkai terkelola atau sekali per eksekusi bingkai yang tidak dikelola. Jika StackSnapshotCallback dipanggil untuk menjalankan bingkai yang tidak terkelola, profiler dapat menggunakan konteks register (direferensikan oleh parameter context) untuk melakukan proses penumpukan yang tidak terkelola milik mereka sendiri. Dalam hal ini, struktur CONTEXT Win32 mewakili keadaan CPU untuk bingkai yang terakhir didorong dalam menjalankan bingkai yang tidak terkelola. Meskipun struktur CONTEXT Win32 mencakup nilai untuk semua register, Anda hanya harus mengandalkan nilai register penunjuk tumpukan, register penunjuk bingkai, register penunjuk instruksi, dan register bilangan bulat nonvolatile (yaitu, yang dipertahankan).

Persyaratan

Platform: Lihat Persyaratan Sistem.

Header: CorProf.idl

Pustaka: CorGuids.lib

Versi .NET Framework: Tersedia mulai dari versi 1.0

Lihat juga