为什么在发布模式下调试会隐藏信息? 在发布时调试时,C++代码不扩展某些变量。什么样的变量不能扩展?为什么?我可以理解一个发布dll已经打包了额外的优化,但不确定这是否是唯一的原因。在“调试”模式下编译时,编译器(和链接器)会添加一些额外的信息,如变量、它们的名称、使用的源文件、行号信息等。在“发布”模式下编译时,这些信息会丢失。但是,可以通过在项目设置中更改来添加它。

为什么在发布模式下调试会隐藏信息? 在发布时调试时,C++代码不扩展某些变量。什么样的变量不能扩展?为什么?我可以理解一个发布dll已经打包了额外的优化,但不确定这是否是唯一的原因。在“调试”模式下编译时,编译器(和链接器)会添加一些额外的信息,如变量、它们的名称、使用的源文件、行号信息等。在“发布”模式下编译时,这些信息会丢失。但是,可以通过在项目设置中更改来添加它。,c++,debugging,native,release,C++,Debugging,Native,Release,在“调试”模式下编译时,编译器(和链接器)会添加有关变量、它们的名称、使用的源文件、行号信息等的额外信息。在“发布”模式下编译时会丢失这些信息。但是,可以通过在项目设置中更改来添加它。在“调试”模式下编译时,编译器(和链接器)会添加有关变量、它们的名称、使用的源文件、行号信息等的额外信息。在“发布”模式下编译时会丢失这些信息。但是,可以通过在项目设置中更改来添加它。在“调试”模式下编译时,编译器(和链接器)会添加有关变量、它们的名称、使用的源文件、行号信息等的额外信息。在“发布”模式下编译时会丢

在“调试”模式下编译时,编译器(和链接器)会添加有关变量、它们的名称、使用的源文件、行号信息等的额外信息。在“发布”模式下编译时会丢失这些信息。但是,可以通过在项目设置中更改来添加它。

在“调试”模式下编译时,编译器(和链接器)会添加有关变量、它们的名称、使用的源文件、行号信息等的额外信息。在“发布”模式下编译时会丢失这些信息。但是,可以通过在项目设置中更改来添加它。

在“调试”模式下编译时,编译器(和链接器)会添加有关变量、它们的名称、使用的源文件、行号信息等的额外信息。在“发布”模式下编译时会丢失这些信息。但是,可以通过在项目设置中更改它来添加它。

即使假设您在生成中有调试信息,调试发布生成(优化)通常也很困难。优化器可能会将代码的结果破坏到您可能无法识别的程度

它将完全删除变量并对调试器隐藏它们(因为变量不在那里,调试器无法显示它们)。它可能不会删除它,但会暂时重新使用寄存器溢出的空间,您将看到内存的值,其中变量会跳到某个随机值。一旦初始化,流可能会被重新排序,变量可能会被重新排序,并且具有正确的值,但是初始化可能会被进一步向下推,并且尚未执行


如果您可以在调试版本中重现该问题,我将从这里开始。如果没有,祝你好运。不要相信你看到的任何东西,但是试着从你可用的数据点中提取尽可能多的信息。

即使假设你在构建中有调试信息,调试发布构建(优化)通常也是困难的。优化器可能会将代码的结果破坏到您可能无法识别的程度

它将完全删除变量并对调试器隐藏它们(因为变量不在那里,调试器无法显示它们)。它可能不会删除它,但会暂时重新使用寄存器溢出的空间,您将看到内存的值,其中变量会跳到某个随机值。一旦初始化,流可能会被重新排序,变量可能会被重新排序,并且具有正确的值,但是初始化可能会被进一步向下推,并且尚未执行


如果您可以在调试版本中重现该问题,我将从这里开始。如果没有,祝你好运。不要相信你看到的任何东西,但是试着从你可用的数据点中提取尽可能多的信息。

即使假设你在构建中有调试信息,调试发布构建(优化)通常也是困难的。优化器可能会将代码的结果破坏到您可能无法识别的程度

它将完全删除变量并对调试器隐藏它们(因为变量不在那里,调试器无法显示它们)。它可能不会删除它,但会暂时重新使用寄存器溢出的空间,您将看到内存的值,其中变量会跳到某个随机值。一旦初始化,流可能会被重新排序,变量可能会被重新排序,并且具有正确的值,但是初始化可能会被进一步向下推,并且尚未执行


如果您可以在调试版本中重现该问题,我将从这里开始。如果没有,祝你好运。不要相信你看到的任何东西,但是试着从你可用的数据点中提取尽可能多的信息。

即使假设你在构建中有调试信息,调试发布构建(优化)通常也是困难的。优化器可能会将代码的结果破坏到您可能无法识别的程度

它将完全删除变量并对调试器隐藏它们(因为变量不在那里,调试器无法显示它们)。它可能不会删除它,但会暂时重新使用寄存器溢出的空间,您将看到内存的值,其中变量会跳到某个随机值。一旦初始化,流可能会被重新排序,变量可能会被重新排序,并且具有正确的值,但是初始化可能会被进一步向下推,并且尚未执行


如果您可以在调试版本中重现该问题,我将从这里开始。如果没有,祝你好运。不要相信你看到的任何东西,但尽量从可用的数据点中提取尽可能多的信息。

是的,这几乎是唯一的原因。在visual studio中使用日志记录来查看这些变量。我有时会修改RelWithDebugInfo配置,以便在不进行任何优化的情况下进行构建。这样调试就容易多了,我有了发布堆。虽然这只对我关闭优化的代码有帮助。但另一方面,托管代码也会发生这种情况吗?是的,这几乎是唯一的原因。在visual studio中使用日志记录查看这些变量。我有时会修改RelWithDebugInfo配置,以便在不进行任何优化的情况下进行构建。这样调试就容易多了,我有了发布堆。虽然这只对我关闭优化的代码有帮助,但附带说明的是,托管代码会发生这种情况吗