Xcode消毒剂如何启用

Xcode Sanitizer How to Enable

使用 Xcode12,Apple Clang Address Sanitizer,我启用... 启用 C++ 容器溢出检查(用于调试和发布)。

我希望启用 C++ 容器溢出检查 给我 运行 次警告,例如。通过将每个 [] 翻译成 .at().

I 运行 类似于下面的代码(它出现在一堆先前函数调用的末尾,其中 V 的元素数量在编译时无法得知。 )

// V is a container with 100 elements, 
// each element is a pointer to objects with a field f;

auto x = V[200]; // gives no error, no bounds checking (but V.size() is 100)
cout << x->f; // gives error, this object is not valid 

我没有得到预期的结果,在 V 上没有进行 运行-时间边界检查。

问题:启用 C++ 容器溢出检查 是否应该给我 .at() 类似 [] 访问权限的边界检查?我怎样才能做到这一点?

方法是这样的:

https://developer.apple.com/documentation/xcode/diagnosing_memory_thread_and_crash_issues_early

要启用此工具,select Address Sanitizer 来自相应方案的“诊断”部分。

此外,可以从该菜单启用其他消毒剂检查。

我已验证此方法有效,它对运行时的任何违规行为进行了非常详细的说明。

注意:与问题中给出的(非工作)方法的不同之处在于,这里的配置是在方案菜单中完成的,而不是在构建设置菜单中完成的。我不知道为什么后者不起作用。