You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Visual Studio 2019中调试注入DLL?解决未加载符号问题

调试注入《英雄联盟》LeagueClient.exe的DLL符号未加载问题解决方案

问题详情

在Visual Studio 2019中调试注入到《英雄联盟》LeagueClient.exe的DLL时,断点提示:

"the breakpoint will not be hit, no symbols loaded for this document c++"

附加进程后模块列表中找不到目标DLL,但DLL功能正常,无法进行调试。已执行以下操作:

  • 创建名为"Debug"的新配置(源码无默认Debug配置)
  • 设置「配置属性->调试->命令」为D:\Riot Games\League of Legends\LeagueClient.exe
  • 配置「链接器->调试->生成调试信息」为Generate Debug Information (/DEBUG)
  • 设置「链接器->调试->生成程序数据库文件」为$(OutDir)$(TargetName).pdb
  • 完成项目构建、启动游戏、注入DLL、附加进程及断点设置

解决步骤

1. 验证DLL与PDB的匹配性

  • 确保注入的DLL和对应的*.pdb文件是同一编译产物,构建后不要修改或替换DLL,直接使用输出目录中的文件。
  • 手动核对$(OutDir)$(TargetName).pdb路径,确认PDB文件存在且路径正确。

2. 手动加载符号

附加到LeagueClient.exe后:

  1. 打开「调试->窗口->模块」(快捷键Ctrl+Alt+U)
  2. 右键模块列表空白处,选择「加载符号->浏览符号」
  3. 定位到DLL对应的PDB文件并加载

提示:如果模块列表看不到你的DLL,大概率是注入工具启用了模块隐藏功能,换用无隐藏的注入方式(比如手动调用LoadLibrary注入)。

3. 调整编译优化与调试信息设置

  • 将Debug配置下「C/C++->优化」设为禁用优化(/Od),优化后的代码会破坏断点关联,导致符号信息不完整。
  • 把「C/C++->常规->调试信息格式」设置为程序数据库(/Zi),生成完整的调试符号。

4. 优化注入方式

  • 避免远程线程注入时使用CREATE_SUSPENDED参数,或确保注入后恢复进程运行,否则模块可能未被正确加载到进程空间。
  • 在DLL的DllMain函数开头添加DebugBreak()调用,注入后会自动触发调试中断,此时附加调试器可自动加载符号。

5. 配置Visual Studio符号搜索路径

  • 打开「工具->选项->调试->符号」,添加你的PDB文件所在目录到符号搜索路径;若需调试系统模块,可勾选「Microsoft符号服务器」。

内容的提问来源于stack exchange,提问作者Saw Khinmaungthoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 22:42:53