在调试时关闭然后打开 VS Address-Sanitizer 或加快速度?

问题描述 投票:0回答:1

我已经检测了我的调试代码、.EXE 和所有 .DLL。我正在追踪一个分配错误,该错误会在大约 5 分钟后破坏内存。检测代码后,它的运行速度低于正常速度的 1%,因此 8 小时后,代码与可能发生错误的位置并不接近。当我删除 Address-Sanitizer,然后只检测一个小的 .DLL 时,它的速度也同样减慢。如何使用完整的检测开始代码调试,然后关闭 Address-Sanitizer,然后在 5 分钟后接近我认为存在错误的代码时将其重新打开?

我在项目属性中启用Address-Sanitizer,C/C++ General Enable Address Sanitizer Yes (/fsanitize=address)。我在 Windows 10 专业版上运行 VS2022 Community。

根据 Google 和 Microsoft 文档,性能影响应该小于 2 倍,因此我的 bug 应该会在大约 10 分钟内被检测到。我是否错误地使用了 Address-Sanitizer,还是有更好的设置?

非常感谢任何帮助!谢谢。

c++ debugging windows-10 visual-studio-2022 address-sanitizer
1个回答
0
投票

使用

ASAN
的更好解决方案可能是使用
gflags
。这种分配内存的方式通常可以立即捕获内存覆盖,而不会过度影响性能。主要缺点是 32 位程序可能会耗尽寻址空间,但尝试它不需要花费任何费用。

神奇的酱汁是:

gflags -p /decommit /enable my_app.exe

和:

gflags -p /disable my_app.exe

无论如何,值得一试。

请注意:

  • 运行后

    gflags
    ,您需要重新启动您的应用程序

  • 您必须在运行“以管理员身份”的命令 shell 中运行

    gflags

祝你好运。

© www.soinside.com 2019 - 2024. All rights reserved.