英文:
Clang: Don't optimize a given file
问题
当使用Clang编译时,我可以将optnone
属性添加到一个函数上,以便在编译时不进行优化。
[[clang::optnone]]
void foo() {
// 此处不应用任何优化
...
}
void bar() {
// 而其他函数仍然会被优化
}
在使用GDB进行调试时,这非常有用。对于那些因为太大而无法完全以调试模式(llvm)编译的程序,我可以选择使用CMake设置为RelWithDebInfo
,然后将属性添加到感兴趣的一些函数中,从而在这些地方获得一致的调试信息,而不必在内联值之间跳来跳去。
是否有一种等效的方法可以在调试模式下编译给定文件中的所有函数,而无需手动将属性添加到每个函数中?
英文:
When compiling with Clang, I can add the optnone
attribute to a function to compile it without optimizations
[[clang::optnone]]
void foo() {
// no optimizations applied in here
...
}
void bar() {
// while other functions are still optimized
}
This is really useful when debugging with GDB. On programs that are too large to be practically compiled entirely in debug mode (llvm), I can instead compile with CMake set to RelWithDebInfo
, add the attribute to some functions of interest, then get a consistent debug in those places without jumping around and fighting inlined values.
Is there any equivalent way to compile all functions in a given file in debug mode, without manually adding the attribute to every function?
Cheers
答案1
得分: 2
- 编译您的源文件单独生成目标文件(这在大多数构建设置中会自动完成);然后针对特定的目标文件设置自定义优化设置。例如:
cc -O3 file1.c -c -o file1.o
cc -O0 -g file2.c -c -o file2.o
将仅优化 file1.c
而不是 file2.c
。这适用于任何编译器。
- 使用基于范围的优化指令,这是 Clang 的扩展。编写
#pragma clang optimize off
可以在那一点之后禁用优化,而#pragma clang optimize on
可以重新启用它们。例如,只需在文件顶部添加#pragma clang optimize off
将禁用整个文件的优化。
英文:
You have a few options:
- Compile your source files individually to object files (this is automatically done with most build setups); then for your particular object file, set custom optimization settings. For example:
cc -O3 file1.c -c -o file1.o
cc -O0 -g file2.c -c -o file2.o
will optimize only file1.c
but not file2.c
. This works for any compiler.
- Use a range-based optimization pragma, a Clang extension. Write
#pragma clang optimize off
to disable optimizations from that point onward, and#pragma clang optimize on
to reenable them. For example, simply putting#pragma clang optimize off
at the top of the file will disable optimizations for the entire file.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论