C++ 如何在visual studio中使用msvc asan

C++ 如何在visual studio中使用msvc asan,c++,windows,visual-studio,address-sanitizer,C++,Windows,Visual Studio,Address Sanitizer,我尝试在project->properties->c/c++->Enable Address Sanitizer(实验性)中启用asan:是(/fsanize=Address) 然后,我可以构建我的项目,但在运行时,它会突然中断 extern“C”void\uu cdecl\u initterm(blah blah)在initterm.cpp中,在gnomes.exe中的0x00007FFFCD3B2EB8(ntdll.dll)处引发异常:0xc000005:访问冲突写入位置0x00005374

我尝试在project->properties->c/c++->Enable Address Sanitizer(实验性)中启用asan:是(/fsanize=Address)

然后,我可以构建我的项目,但在运行时,它会突然中断
extern“C”void\uu cdecl\u initterm(blah blah)
在initterm.cpp中,在gnomes.exe中的0x00007FFFCD3B2EB8(ntdll.dll)处引发异常:0xc000005:访问冲突写入位置0x000053747340000

其他人告诉我,这是一件经常发生的事情,我应该继续下去。然后它移动到ntdll.dll或其他窗口api文件中的大约50个异常,然后最终进入我的程序,在那里它在main的第一行出错:
GTApplication*app=new GTApplication()
(我的主代码的第一行)带有
访问冲突写入位置blah

所以我不确定如何解释这些信息。我的计算机上的基础windows API层是否有问题?或者这只是不可避免的(如果是奇怪的)行为。 这是否意味着我应该将程序的第一行解释为使用asan的一种怪癖?或者我的应用程序对象的分配有问题吗


我是否错误地使用了asan?

在使用VS 16.8.3构建64位应用程序(查看消息中列出的指针大小,您的情况也一样)时,我面临着同样的问题。即使对于应用程序,它实际上也不做任何事情(返回0)

如果可能的话,考虑建立应用程序的32位版本并检查,如果问题仍然存在。ASan不会为我报告32位二进制文件的此类问题


VS中的地址消毒器仍处于试验阶段,对x86-64的支持甚至不如对32位x86的支持成熟。

我担心现有信息无法解决这个问题。如果您能提供更多相关信息,将有助于解决问题。
\u initterm
在CRT初始化期间运行。它的主要用途是初始化具有静态存储持续时间的对象(例如,其类型具有非平凡c'TOR的全局变量)。您的代码是否有全局变量,其初始化依赖于具有静态存储持续时间的其他对象?我在尝试使用64位构建asan时看到类似问题。。但在32位版本的同一个源代码中没有问题。我可以确认我可以用asan运行32位应用程序,没有问题,但我有相同的问题,比如在尝试64位版本的同一应用程序时遇到的问题。