Bagikan melalui


Fungsi FunctionTailcall2

Memberi tahu profiler bahwa fungsi eksekusi saat ini akan melakukan panggilan ekor ke fungsi lain dan memberikan informasi tentang bingkai tumpukan.

Sintaks

void __stdcall FunctionTailcall2 (  
    [in] FunctionID         funcId,
    [in] UINT_PTR           clientData,
    [in] COR_PRF_FRAME_INFO func  
);  

Parameter

funcId [in] Pengidentifikasi dari fungsi yang sedang dijalankan dan akan melakukan panggilan ekor.

clientData [in] Pengidentifikasi fungsi yang dipetakan ulang, yang sebelumnya ditentukan profiler melalui FunctionIDMapper, dari fungsi yang saat ini dijalankan yang akan melakukan panggilan ekor.

func [in] Nilai COR_PRF_FRAME_INFO yang menunjuk ke informasi tentang bingkai tumpukan.

Profiler harus memperlakukan ini sebagai pegangan buram yang dapat diteruskan kembali ke mesin eksekusi dalam metode ICorProfilerInfo2::GetFunctionInfo2.

Keterangan

Fungsi target dari panggilan ekor akan menggunakan bingkai tumpukan saat ini, dan akan kembali langsung ke pemanggil fungsi yang membuat panggilan ekor. Ini berarti bahwa panggilan balik FunctionLeave2 tidak akan dikeluarkan untuk fungsi yang merupakan target panggilan ekor.

Nilai parameter func tidak valid setelah fungsi FunctionTailcall2 kembali karena nilai dapat berubah atau dihilangkan.

Fungsi FunctionTailcall2 adalah panggilan balik; Anda harus menerapkannya. Implementasi harus menggunakan atribut kelas penyimpanan __declspec(naked).

Mesin eksekusi tidak menyimpan register apa pun sebelum memanggil fungsi ini.

  • Saat masuk, Anda harus menyimpan semua register yang Anda gunakan, termasuk yang ada di floating-point unit (FPU).

  • Saat keluar, Anda harus memulihkan tumpukan dengan memunculkan semua parameter yang didorong oleh pemanggilnya.

Implementasi FunctionTailcall2 tidak boleh memblokir karena akan menunda pengumpulan sampah. Implementasi tidak boleh mencoba pengumpulan sampah karena tumpukannya mungkin tidak dalam keadaan yang ramah pengumpulan sampah. Jika pengumpulan sampah dicoba, runtime akan memblokir hingga FunctionTailcall2 kembali.

Selain itu, fungsi FunctionTailcall2 tidak boleh memanggil kode terkelola atau dengan cara apa pun menyebabkan alokasi memori terkelola.

Persyaratan

Platform: Lihat Persyaratan Sistem.

Header: CorProf.idl

Pustaka: CorGuids.lib

Versi .NET Framework: Tersedia mulai dari 2.0

Lihat juga