C++ pragma optimize(”关闭)不';t完全禁用优化

C++ pragma optimize(”关闭)不';t完全禁用优化,c++,windows,debugging,visual-c++,C++,Windows,Debugging,Visual C++,我在这里查看文档: 我还搜索了现有的SO问题。现有的问题讨论了如何关闭一个文件的优化,而不是在所有优化都未关闭的情况下该怎么做 目前,在发行版中调试时,我需要在特定源文件中的函数外部使用#pragma optimize(“,off)来禁用优化。对整个项目使用debug配置不是一个选项 但是,这并不是完全禁用该文件的优化,也就是说,我仍然得到无序的指令,不能在某些位置放置断点。这是预期的还是我真的没有关闭源文件的所有优化?在后一种情况下,如何关闭文件的所有优化。在前一种情况下,我的选择是什么?确切

我在这里查看文档:

我还搜索了现有的SO问题。现有的问题讨论了如何关闭一个文件的优化,而不是在所有优化都未关闭的情况下该怎么做

目前,在
发行版中调试时,我需要在特定源文件中的函数外部使用
#pragma optimize(“,off)
来禁用优化。对整个项目使用
debug
配置不是一个选项


但是,这并不是完全禁用该文件的优化,也就是说,我仍然得到无序的指令,不能在某些位置放置断点。这是预期的还是我真的没有关闭源文件的所有优化?在后一种情况下,如何关闭文件的所有优化。在前一种情况下,我的选择是什么?

确切地说,为什么需要关闭优化?您仍然可以调试优化的代码。无序指令和设置断点不应该是符号的问题。这是我们的代码库的问题。即使使用
#pragma optimize(“,off)
我也无法从一些符号/变量中获得任何有意义的信息。当我开始调试时,我设置的一些断点会跳转几行代码(这在VS中是正常行为,它会跳转由于优化而无法设置断点的代码行,并将断点设置为下一行可用代码)-此完全禁用所有优化如果您正在进行零售构建,通常会得到/GL(全程序优化)、/O2(速度优化)和/Oi(内部优化)根据平台的不同。可以使用optimize pragma覆盖本地/O2和/Oi优化,但您仍然可以在retail中获得默认的/GL优化,该优化可以注册局部变量并重新排序代码。您可以使用/Od只编译感兴趣的一个文件,而不使用其他retail,并执行se分离链接传递。我相信这会阻止/GL优化该文件。@ColinRobertson我会尝试一下,如果可行的话,将其作为答案。