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 来自相应方案的“诊断”部分。
此外,可以从该菜单启用其他消毒剂检查。
我已验证此方法有效,它对运行时的任何违规行为进行了非常详细的说明。
注意:与问题中给出的(非工作)方法的不同之处在于,这里的配置是在方案菜单中完成的,而不是在构建设置菜单中完成的。我不知道为什么后者不起作用。
使用 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 来自相应方案的“诊断”部分。
此外,可以从该菜单启用其他消毒剂检查。
我已验证此方法有效,它对运行时的任何违规行为进行了非常详细的说明。
注意:与问题中给出的(非工作)方法的不同之处在于,这里的配置是在方案菜单中完成的,而不是在构建设置菜单中完成的。我不知道为什么后者不起作用。