gpt4 book ai didi

c# - 即使 DebugType=full,也无法在 Release模式下调试应用程序

转载 作者:可可西里 更新时间:2023-11-01 09:00:18 27 4
gpt4 key购买 nike

我们正在为 Release 构建解决方案,但是当尝试使用 studio 2010 professional 进行附加时,没有线程显示任何堆栈信息,也无法设置任何断点等。

目标是能够将 Visual Studio/JIT 调试器附加到正在运行的进程,同时获得尽可能多的优化优势。

我们的大多数搜索都归结为“使用 debug:full 编译”,您将能够进行调试,但情况似乎并非如此,我认为 JIT 会在运行时优化代码,因此我们不能调试,这是真的吗?是否可以编译并告诉 JIT 淡化优化并允许调试? (同时保留其他优化)

更新

使用@HansPassant 的回答,我查看了模块,发现尽管 pdb 与二进制文件位于同一目录中,但确实没有加载任何调试符号。我还看到我的库被标记为“用户代码”-“否”,这可能是它没有自动加载的原因。通过手动加载符号并禁用“just-my-code”,我还能够设置断点并查看堆栈。

现在的问题:为什么我的代码没有被标记为用户代码?这是正常行为吗?我可以通过某种方式将它配置到我的程序集中以避免这种情况吗?

最佳答案

调试优化代码可不是一件愉快的事。您当然可能无法设置断点,方法可能已内联。当变量被优化为存储在 cpu 寄存器中时,检查局部变量和方法参数很容易使调试器生气。

当然,您仍然可以检查调用堆栈,您会在堆栈跟踪中看到未内联的方法。您可能犯的基本错误:

  • 附加调试器时,您可以选择调试器类型。一定要选择“Managed”,原生调试器用处不大
  • 确保您正在查看正确的线程,程序可以在任意位置中断。使用Debug + Windows + Threads选择合适的线程
  • 确保您的代码中的某个位置确实存在问题。您很容易在 Windows 操作系统 DLL 或框架方法中结束,在这种情况下几乎没有什么可看的。工具 + 选项、调试、符号并启用符号服务器,以便在 Windows 内部启动的堆栈跟踪是准确的
  • 调试器必须能够找到 PDB 文件。使用 Debug + Windows + Modules,你会看到进程中加载​​的程序集。首先确保您要调试的那个确实已加载。右键单击它并选择“符号加载信息”。它会向您显示它在何处查找 PDB 文件
  • “仅我的代码”选项可能会严重妨碍您,您很可能会遇到大量不属于您的代码块。工具 + 选项、调试、常规,然后关闭该选项。

关于c# - 即使 DebugType=full,也无法在 Release模式下调试应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17675226/

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