gpt4 book ai didi

debugging - 如何关闭 Clang++ 中的_所有_优化?

转载 作者:行者123 更新时间:2023-12-02 11:27:47 26 4
gpt4 key购买 nike

我正在尝试调试一些 C++11 代码,而 LLDB 没有帮助。代码大致如下:

void f(my_type dt) {
try {
g(h(dt));
}
catch ( /* reasonable exception type here */ ) {
}
}

当我在 g(h(dt)) 行放置断点时,LLDB 坚持认为 dt 的值不可用。它肯定不能被忽略,因为它在 h 的实现中用作某些数据库查询的输入。

我使用 CMake,它使用以下标志进行编译:

CXX_FLAGS = -g -O0 -fPIC -std=c++11 -stdlib=libc++ -Wall

我确认(使用 make VERBOSE=true)这些标志确实用于构建项目。据我所知,应包含完整的调试信息并关闭所有优化。事实显然并非如此。 我还可以添加哪些其他标志来强制 Clang 保持所有参数和变量在整个调用堆栈中可用?

不幸的是,使用小文件和函数的小测试用例不会重现此问题:大多数时候,变量会按我的预期保留。

我正在运行 Yosemite 的 Mac 上工作。

$ clang++ --version
Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.1.0
Thread model: posix

最佳答案

这很可能是编译器中的错误。在 -O0 处,它应该始终使变量在定义 block 期间保持事件状态。它实际上可能是,但有人忘记了它在编译器管道中的某个位置。

如果您可以举出一些示例来说明此问题,并且您不介意与 llvm 人员分享,那么请通过 llvm bugzilla ( http://llvm.org/bugs/ ) 或 Apple llvm 团队 (http://bugreport.apple.com ) 提交错误。

关于debugging - 如何关闭 Clang++ 中的_所有_优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28463067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com