ReSharper 2025.2 Help

调试没有调试信息(PDB)的模块

使用 ReSharper,您可以调试任何已编译模块,即使它没有调试信息(PDB)。 ReSharper 将反编译模块,为其生成 PDB,并自动将该模块的反编译符号加载到 Visual Studio 调试器中。

先决条件

在调试没有 PDB 的模块之前,请检查以下设置:

  • ReSharper:在 ReSharper | 选项 | 环境 | 产品与功能 选项页面上,确保选中 调试器集成 复选框。

  • Visual Studio:在 工具 | 选项 | 调试 | 符号 选项页面上,确保 将符号缓存到此目录 字段具有有效的磁盘路径值。

  • Visual Studio:在 工具 | 选项 | 调试 | 常规 选项页面上,确保清除 启用 Just My Code 复选框。

但是,即使这些设置中的一个或两个未达到预期值,当您尝试从反编译模块加载符号时,ReSharper 会建议自动更正这些值。 在这种情况下,它会将 %LOCALAPPDATA%\Temp\SymbolCache 添加为符号缓存目录。

调试

在调试您的程序之前或调试开始后,您需要为每个要调试的已编译模块加载符号。 您可以通过以下方式之一完成此操作:

  • 在调试模式下,打开 Visual Studio 的模块窗口(调试 | 窗口 | 模块 ),选择一个或多个模块,右键单击所选内容,然后选择 使用 ReSharper 反编译器加载符号

  • 进程资源管理器窗口ReSharper | 窗口 | 进程资源管理器 )中,选择一个或多个托管模块,或一个或多个进程,然后在上下文菜单中选择 启用调试。 如果您选择进程,ReSharper 将为进程中的所有托管模块生成并加载不存在的 PDB。

  • 导航到已编译模块中的目标符号,并在反编译的源代码中设置断点。 如果您设置断点的模块的符号尚未加载,ReSharper 将显示一个弹出窗口,您可以在其中启用该模块的调试:

    ReSharper:为已编译模块启用调试

反编译和加载符号可能需要一些时间,因此在您通过上述方式之一启动该过程后,ReSharper 会在项目/PDB 生成状态窗口中显示进度。

ReSharper:项目/PDB 生成状态窗口

调试 优化的程序集时,某些调试器功能将不可用,例如,即使符号文件正确,您也无法查看局部变量的值。 因此,您可能需要禁用优化。

  • 当 Visual Studio 处于调试模式时,检查程序集是否已优化——打开 模块 窗口(调试 | 窗口 | 模块 ),并检查“已优化”列。

  • 在 Visual Studio 选项中选择 在模块加载时禁止 JIT 优化 复选框(工具 | 选项 | 调试 | 常规)。

  • 要禁用所有 NGEN(预 JIT)映像的使用( *.ni.dll ),您可以设置环境变量 COMPLUS_ZapDisable=1。 查看以下文章以获取示例和更多信息:

潜在问题

如果程序集是 没有调试目录构建的,即使重新生成了 PDB,Visual Studio 调试器也无法映射程序集中的符号。

例如,当在项目属性中选择了 生成 | 高级 | 调试信息 )时,可能会在 Visual Studio 中创建此类程序集,这意味着既不会为程序集生成 PDB,也不会生成调试目录。

如果您尝试调试此类程序集,此问题将在 PDB 生成状态窗口中报告。

最后修改日期: 2025年 9月 27日