Masalah AddressSanitizer yang diketahui
Catatan
Kirimi kami umpan balik tentang apa yang ingin Anda lihat di rilis mendatang, dan laporkan bug jika Anda mengalami masalah.
Opsi dan fungsionalitas yang tidak kompatibel
Opsi dan fungsionalitas ini tidak kompatibel dengan /fsanitize=address
dan harus dinonaktifkan atau dihindari.
- Opsi
/RTC
tidak kompatibel dengan AddressSanitizer dan harus dinonaktifkan. - Penautan inkremental tidak didukung, dan harus dinonaktifkan.
- Edit dan Lanjutkan tidak didukung, dan harus dinonaktifkan.
- Coroutines tidak kompatibel dengan AddressSanitizer, dan fungsi yang dapat dilanjutkan dikecualikan dari instrumentasi.
- OpenMP tidak didukung, dan harus dinonaktifkan.
- C++ terkelola tidak didukung, dan harus dinonaktifkan.
- (C++AMP) tidak didukung, dan harus dinonaktifkan.
- Aplikasi Universal Windows Platform (UWP) tidak didukung.
- File daftar kasus khusus tidak didukung.
- MFC menggunakan opsi runtime opsional
alloc_dealloc_mismatch
tidak didukung.
Dukungan pustaka standar
Pustaka standar MSVC (STL) sebagian tercerahkan untuk memahami AddressSanitizer dan memberikan pemeriksaan lainnya. Untuk informasi selengkapnya, lihat kesalahan container-overflow.
Ketika anotasi dinonaktifkan atau dalam versi tanpa dukungan, pengecualian AddressSanitizer yang dimunculkan dalam kode STL masih mengidentifikasi bug sejati. Namun, mereka tidak setepat yang mereka bisa.
Contoh ini menunjukkan kurangnya presisi dan manfaat mengaktifkan anotasi:
// Compile with: cl /fsanitize=address /Zi
#include <vector>
int main() {
// Create a vector of size 10, but with a capacity of 20.
std::vector<int> v(10);
v.reserve(20);
// In versions prior to 17.2, MSVC ASan does NOT raise an exception here.
// While this is an out-of-bounds write to 'v', MSVC ASan
// ensures the write is within the heap allocation size (20).
// With 17.2 and later, MSVC ASan will raise a 'container-overflow' exception:
// ==18364==ERROR: AddressSanitizer: container-overflow on address 0x1263cb8a0048 at pc 0x7ff6466411ab bp 0x005cf81ef7b0 sp 0x005cf81ef7b8
v[10] = 1;
// Regardless of version, MSVC ASan DOES raise an exception here, as this write
// is out of bounds from the heap allocation.
v[20] = 1;
}
Versi Windows
Karena ada dependensi dengan versi Windows tertentu, dukungan difokuskan pada Windows 10. MSVC AddressSanitizer diuji pada 10.0.14393 (RS1), dan 10.0.21323 (build insider prarilis). Laporkan bug jika Anda mengalami masalah.
Penggunaan memori
Runtime AddressSanitizer tidak merilis memori kembali ke OS selama eksekusi. Dari sudut pandang OS, mungkin terlihat seperti ada kebocoran memori. Keputusan desain ini disengaja, agar tidak mengalokasikan semua memori yang diperlukan di muka.
Lokasi DLL runtime AddressSanitizer
File clang_rt.asan*.dll
runtime diinstal di samping pengkompilasi di %VSINSTALLDIR%\VC\Tools\MSVC\<version>\bin\<host-arch>\<target-arch>\
. Lokasi ini berada di jalur dalam sesi penelusuran kesalahan, dan di perintah pengembang Visual Studio. File-file ini tidak pernah ditempatkan di C:\Windows\System32
atau C:\Windows\SysWOW64
.
Dukungan lembar properti kustom
Jendela Pengelola Properti di Visual Studio IDE memungkinkan Anda menambahkan file kustom .props
ke proyek Anda. Meskipun properti Aktifkan Address Sanitizer (<EnableASAN>
) ditampilkan, build tidak menghormatinya. Itu karena file kustom .props
disertakan setelah Microsoft.cpp.props
, yang menggunakan <EnableASAN>
nilai untuk mengatur properti lain.
Sebagai solusinya, Anda dapat membuat Directory.Build.props
file di akar proyek Anda untuk menentukan <EnableASAN>
properti . Untuk informasi selengkapnya, lihat Menyesuaikan build C++.
Baca juga
Gambaran umum AddressSanitizer
Referensi bahasa dan build AddressSanitizer
Referensi runtime AddressSanitizer
Byte bayangan AddressSanitizer
AddressSanitizer cloud atau pengujian terdistribusi
Integrasi debugger AddressSanitizer
Contoh kesalahan AddressSanitizer
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk