初试clang-cl fsanitizer的问题与解决

前言

作者在编写一个简单的程序时想试试sanitizer的功能,但是屡次遇到问题,这里记录下解决过程

环境

ASan对/MDd的支持问题

clang-cl中,/fsanitizer不支持和/MDd参数同时出现,需要手动指定使用非调试版runtime库:

set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL")

sanitizer库连接问题

我在CMakeLists.txt中添加了这样一行去开启ASanitizer功能:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=address /Oy- /O1")

编译结果是连接失败,查证资料需要手动连接库:

target_link_directories(main PRIVATE "clang+llvm-22.1.8-x86_64-pc-windows-msvc/lib/clang/22/lib/windows")
target_link_libraries(main PRIVATE
        clang_rt.asan_dynamic-x86_64
        clang_rt.asan_dynamic_runtime_thunk-x86_64
)

程序运行问题

库连接完毕了,用CLion运行程序出现:

D:\CLionProjects\untitled\cmake-build-debug\main.exe

Process finished with exit code -1073741511 (0xC0000139)

结果是DLL存在入口点问题。

以Debug模式启动程序会出现找不到过程入口点??2@YAPEAX_K@Z的信息。

经过查证,发现是clang/22/lib/windows不位于PATH中,且MSVC目录下存在一个同名DLL:MSVC\14.44.35207\bin\Hostx64\x64\clang_rt.asan_dynamic-x86_64.dll。

在CLion中以run的方式启动程序时会带上msvc的path,如果单独运行程序,错误码是-1073741515,即0xC0000135,找不到DLL。

问题就在这里,编译时链接的是clang目录下的dll,运行时采用的是msvc下的dll。

到这里解决方案就很简单了,直接把clang下的dll拷贝过来就行了:

add_custom_command(TARGET main POST_BUILD
            COMMAND ${CMAKE_COMMAND} -E copy_if_different
            "clang+llvm-22.1.8-x86_64-pc-windows-msvc/lib/clang/22/lib/windows/clang_rt.asan_dynamic-x86_64.dll"
            "$<TARGET_FILE_DIR:main>")

santizier报告和CLion的santizier窗口问题

到这里还没有完全解决问题,我的主函数中有一个极其明显的泄露:

int main()
{
  auto p = new int{1};
  return 0;
}

这里没有报告——答案是windows平台上的fsanitizer暂时不支持leak检查。

好吧,那我们就使用其他功能,但是如果我们只是单纯地运行程序,只能在命令行得到报告,CLion界面倒是一片祥和:

CLion1

与Jetbrains官方文档中呈现的效果不太一样:

JetbrainsCLion1

我目前是没有找到什么解决方案,等到找到解决方案了再来更新吧(2026-10-16)

总结

老老实实用WSL,别整这些有的没的,fsanitizer何valgrind都能正常用。

一定要用MSVC就别几把惦记CLion了,Visual Studio (Code)一把梭得了。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇