二进制文件没有使用调试信息构建

24

我正在使用Visual Studio 2013、.Net Framework 4.0和C#。

我试图调试项目中的一个文件。我将项目属性设置为调试构建,并取消了“优化”选项。然而,每当我尝试调试该项目时,它无法加载符号。因此,我转到模块窗口以加载符号,发现dll的“已优化”列设置为“Yes”,“用户代码”列设置为“No”,并在符号状态列中显示“二进制文件没有使用调试信息”的消息。

我已经多次清理和重建、重置iis,并手动清除临时asp.net文件,但都没有效果。

有人知道如何解决这个问题吗?


我已将项目属性设置为debug build - 你的意思是你已将活动配置设置为Debug? - lavrik
关于临时的ASP.NET文件,您提到的是某种Web项目吗?如果是这样,相关的web.config中如何设置“编译”元素? - Damien_The_Unbeliever
@lavrik 是的,我已经将活动配置设置为调试模式。 - tuseau
@Damien_The_Unbeliever 是的,它是一个Web应用程序。抱歉我应该说清楚了。web.config编译元素具有debug="true"。 - tuseau
对于 Visual Studio 2017(以及可能更早版本),您必须在 C/C++“常规”页面上设置“调试信息格式”,并且在链接器选项卡上将“GenerateDebugInfo”设置为“生成调试信息”。 - M Katz
7个回答

52
如果您的项目已处于“调试模式”,请检查项目“构建”选项卡中的“高级”构建设置对话框。
确保“调试信息”未设置为“无” enter image description here 参考: Stackoverflow MSDN

请注意,高级按钮内的设置是相对于所选配置的。我花了一分钟才发现我正在为与我的活动配置不同的配置设置高级构建设置。 - madannes

2

对于Visual Studio 2017,无论是配置发布还是调试,您都可以创建一个pdb文件来获取调试信息,方法如下:

  • 在解决方案资源管理器中右键单击您的项目,选择“属性”
  • 选择“配置属性”
  • 选择“调试”
  • 在“生成调试信息”中选择“Yes (/DEBUG)”
  • 在“生成程序数据库文件”中输入:$(OutDir)$(TargetName).pdb
(注:pdb文件是一种用于存储调试信息的文件格式)

1
如果你遇到了这个问题,而其他答案都没有起作用,请检查解决方案 -> 属性 -> 配置,并确保你的项目已设置为调试模式。

1
如果您想从托管代码(C#)调试本机代码(C ++),请确保将属性设置为混合而不是仅限本机。
  1. 右键单击项目,然后单击属性
  2. 调试选项卡下,转到调试器类型部分,并将应用程序进程更改为混合(托管和本机)

(我遵循了这里 Weston提供的答案。感谢Weston!)


0

你正在尝试调试的 DLL 很可能没有在你的解决方案中构建。你需要找到它在哪里被构建,并获取一个调试版本(或至少是带有 pdb 符号文件的发布版本)。


它肯定已经被构建了。在构建后,我可以在bin文件夹中看到它,并且它以主项目命名。 - tuseau
@tuseau,请确保构建引用了该项目(即删除引用,然后重新添加)。 - Grzenio
构建就是项目本身。这个解决方案包含一个Web应用程序项目,我直接发布到IIS并附加到进程中。 - tuseau
2
发布配置文件是什么?它是否也具有调试构建模式? - lavrik
1
啊哈!在发布配置文件(pubxml)中,它被设置为“Release”而不是“Debug”。谢谢。 - tuseau
如果有人在调试模式下遇到此问题,则应检查项目的高级构建设置中是否未将“调试信息”(即pdb文件或符号)设置为“无”。欲了解更多信息,请查看我的答案。 - Abdul Rauf

0

我解决这个问题的方法是在两个地方设置调试模式

  1. solution > properties > configuration Properties > configuration (选择代码所在的项目并将配置设置为调试)

  2. 右键单击要调试的项目 > 属性 > 将配置设置为调试

清理,重新构建,你就可以开始了


-2
对于Visual Studio 2019, 在解决方案资源管理器中右键单击您的项目,选择“属性” -> 选择编译 -> 单击高级编译选项 -> 将生成调试信息设置为完整。然后清理解决方案并重新构建解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接