在包含 pybind11 包装的 C++ 的 python 代码上运行 santizers(ubsan、asan 等)

Running santizers (ubsan, asan, etc) on python code containing C++ wrapped by pybind11

提问人:Steven Scott 提问时间:10/20/2022 更新时间:10/20/2022 访问量:368

问:

我维护着一个大型的 C++ 库,我已经使用 pybind11 部分公开给 python。C++ 库包含单元测试,我有时会在各种清理程序下运行:asan、tsan 等。这些测试运行得很干净,但测试当然并不完美,你不能 100% 测试所有边缘情况。

当我将这个库与特定设置、特定数据集和各种选项一起使用时,有一个特定的 jupyter 笔记本崩溃,这些选项可以在纯 C++ 环境中复制,但这种复制将非常耗费人力、耗时且容易出错。

如果我面前有纯 C++,我会通过 ubsan、asan 等运行笔记本,以确保我不会目睹未定义的行为或段错误。有没有办法将这些消毒剂(或等效的东西)应用到我的笔记本上,而无需在原始 C++ 中重写所有 python 胶水?

python c ++ pybind11 address-sanitizer ubsan

评论

0赞 Osyotr 10/20/2022
也许使用 asan、tsan 等构建 python,然后用你的模块运行它?
1赞 yugr 10/20/2022
这个问题可能会有所帮助。
0赞 unddoch 10/20/2022
Valgrind 不需要使用特殊选项进行编译,因此它也可能很有用。
0赞 Steven Scott 10/21/2022
Yugr指出了正确的解决方案。谢谢。

答: 暂无答案