调试没有调试信息(PDB)的模块
使用 ReSharper,您可以调试任何已编译模块,即使它没有调试信息(PDB)。 ReSharper 将反编译模块,为其生成 PDB,并自动将该模块的反编译符号加载到 Visual Studio 调试器中。
先决条件
在调试没有 PDB 的模块之前,请检查以下设置:
ReSharper:在 选项页面上,确保选中 调试器集成 复选框。
Visual Studio:在 选项页面上,确保 将符号缓存到此目录 字段具有有效的磁盘路径值。
Visual Studio:在 选项页面上,确保清除 启用 Just My Code 复选框。
但是,即使这些设置中的一个或两个未达到预期值,当您尝试从反编译模块加载符号时,ReSharper 会建议自动更正这些值。 在这种情况下,它会将 %LOCALAPPDATA%\Temp\SymbolCache 添加为符号缓存目录。
调试
在调试您的程序之前或调试开始后,您需要为每个要调试的已编译模块加载符号。 您可以通过以下方式之一完成此操作:
在调试模式下,打开 Visual Studio 的模块窗口( ),选择一个或多个模块,右键单击所选内容,然后选择 使用 ReSharper 反编译器加载符号。
在 进程资源管理器窗口 ( )中,选择一个或多个托管模块,或一个或多个进程,然后在上下文菜单中选择 启用调试。 如果您选择进程,ReSharper 将为进程中的所有托管模块生成并加载不存在的 PDB。
导航到已编译模块中的目标符号,并在反编译的源代码中设置断点。 如果您设置断点的模块的符号尚未加载,ReSharper 将显示一个弹出窗口,您可以在其中启用该模块的调试:

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

调试 优化的程序集时,某些调试器功能将不可用,例如,即使符号文件正确,您也无法查看局部变量的值。 因此,您可能需要禁用优化。
当 Visual Studio 处于调试模式时,检查程序集是否已优化——打开 模块 窗口( ),并检查“已优化”列。
在 Visual Studio 选项中选择 在模块加载时禁止 JIT 优化 复选框()。
要禁用所有 NGEN(预 JIT)映像的使用( *.ni.dll ),您可以设置环境变量
COMPLUS_ZapDisable=1。 查看以下文章以获取示例和更多信息:
潜在问题
如果程序集是 没有调试目录构建的,即使重新生成了 PDB,Visual Studio 调试器也无法映射程序集中的符号。
例如,当在项目属性中选择了 无 ( )时,可能会在 Visual Studio 中创建此类程序集,这意味着既不会为程序集生成 PDB,也不会生成调试目录。
如果您尝试调试此类程序集,此问题将在 PDB 生成状态窗口中报告。