c++ - 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()
是否应该像边界检查一样给我[]
访问权限?我怎样才能做到这一点?
解决方案
这是这样做的方法:
https://developer.apple.com/documentation/xcode/diagnosing_memory_thread_and_crash_issues_early
要启用此工具,请从相应方案的 Diagnostics 部分中选择 Address Sanitizer。
此外,可以从该菜单启用其他消毒剂检查。
我已经验证了它的工作原理,它非常详细地说明了运行时的任何违规行为。
注意:与问题中给出的(非工作)方法的区别在于,这里的配置是在方案菜单中完成的,而不是在构建设置菜单中。我不知道为什么后者不起作用。
推荐阅读
- ios - 每五秒发出一次声音循环警报
- java - 由 org.springframework.beans.factory.BeanCreationException 导致成功安装 maven 的 Tomcat 战争部署错误
- sql - 将列转换为分组依据/计数
- javascript - 为什么我的 Mongo DB 没有捕获超过 1 个链接?
- javascript - 我将羽毛光用于图片库,但是当我单击表单中的输入字段(非模态)时会导致错误
- javascript - 如何解析在 JSON 中作为字符串发送的 POINT 对象?
- python - 如何以有效的方式创建 2D numpy 数组的相应元素的元组
- debugging - 如何将 Graphene-Django / Graphene-Python 异常打印到控制台进行调试?
- java - 在 SQLite 中使用 DATETIME 列时如何避免 NumberFormatException?
- c++ - 为什么我在这两个分配中得到不同的输出,一个在函数中,另一个在指针的 main 中?