首页 > 解决方案 > Xcode Sanitizer 如何启用

问题描述

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

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

我运行类似于下面的代码(它出现在一堆以前的函数调用的末尾,其中元素的数量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()是否应该像边界检查一样给我[]访问权限?我怎样才能做到这一点?

标签: c++xcodexcode12bounds-checker

解决方案


这是这样做的方法:

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

要启用此工具,请从相应方案的 Diagnostics 部分中选择 Address Sanitizer。

在此处输入图像描述

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

我已经验证了它的工作原理,它非常详细地说明了运行时的任何违规行为。

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


推荐阅读