本帖最后由 Qter 于 2020-1-19 01:05 编辑 Windbg下载微软符号表1. 设置环境变量 _NT_SYMBOL_PATH srv*c:\symbols*http://msdl.microsoft.com/download/symbols 2. 翻墙 发现不翻墙好像下载不了。 3. 发现有时候需要某个模块(dll或者exe)的pdb(pdb文件ida也能识别),不过windbg就是不自动下载。 这儿有两种下载方法: 1> 命令: symchk tlntSess.exe //下载tlntsess.pdb到c:\symbols目录下 2》 Windbg命令: .reload /f tlntSess.exe 参考: http://bbs.pediy.com/showthread.php?t=151058 ——————————————— 下载安装 http://www.firemail.wang:8088/fo ... thread&tid=9866 |
说在前面: 微软符号服务器地址http://msdl.microsoft.com/download/symbols, 但是你手动在浏览器里面输入是访问不到的,他只提供给调试程序进行下载,可以用下面方法进行下载。 方法1: VS2003以后的版本,通过attach到一个进程中或者启动一个程序进行调试,然后打开模块列表窗口(主菜单-->调试--> 窗口--> 模块,或者按Ctrl+D,M直接打开),在列表中每一个模块进行右键,即可进行下载符号。 方法2: 使用windbg进行下载,同样是attach或run一个程序,设置一下符号路径,然后使用 .reload 或者.reload /f /v ntoskrnl.exe (这个试过好像不可以,具体请高手指出原因),当然也可以强制进行符号加载 使用 ld * 加载当前模块中所有的模块符号,或者 ld ntdll (加载指定模块)。 方法3: 采用symchk.exe 来进行加载(优点:在不调用dl的情况就可对dll进行符号加载,防止dll符号文件遗漏加载的问题)。 symchk /r c:\windows\system32 /s SRV*c:\symbols\*http://msdl.microsoft.com/download/symbols 这个的意思是对c:\windows\system32下的exe和dll进行递归加载符号,目前不太清楚,怎么指定只对特定文件进行单独加载符号文件,请高手指出。 方法4: 自己写下载符号文件的程序(当然如果你对windows的整个调试机制比较熟悉,可以采用,但是个人觉得没那个必要,毕竟微软提供了工具让你使用了)。 建立 Symbols服务器 对于ReleaseSymbols和TempSymbols目录应该是可控的,即一般设置管理员可写,其它人只读,通常由管理员在编译机编译完后同时更新其pdb文件。WinSymbols可以设置所有人可读写。 设置调试器Symbols路径 这样设置后,调试器首先会到_NT_ALT_SYMBOL_PATH指定的共享路径中去寻找pdb文件,并把找到的文件缓存到c:\symbols目录下,下次访问时就不用到共享目录中查找,这样可以提高速度。 当在_NT_ALT_SYMBOL_PATH中找不到时会查看路径_NT_SYMBOL_PATH,接着自动从微软官方网站下载windows系统的pdb文件,并缓存到共享目录[url=]\\symbols_server\WinSymbols[/url]中,缓存的好处是当其它人下载相同pdb文件时就直接从共享目录拉取,不用再跳到微软网站拉取。 注意设置以上变量后第一次使用Windbg或者VS调试时,因为要下载windows系统的pdb文件,可能要等待一段时间(Windbg会在命令行窗口右下角显示“BUSY”状态,但也有可能不显示状态,VS在状态栏会显示Loading symbols for XXX),并且pdb文件都相对比较大,视网速快慢可能要等待十几分钟到几个小时。另外在测试中发现,WinDbg下载symbols的速度比VS快得多。 如果要经常使用VC.Net及以上版本,上面的设置会有些问题,因为如果有一些dll没有symbols,这时VS每次进入调试状态时都会试图到微软网站查找相应的pdb文件,导致启动调试的速度很慢。 最好的方法是在windbg的菜单“File”->“Symbol File Path...”填入 而对VS.Net及以上版本,在“Tools”—〉“Options”—〉“Bebugging”—〉“Symbols”面板中,逐一添加pdb路径 或者使用symchk工具下载symbols,见后面《附注:手工下载windows symbols的方法》 配置pdb文件编译输出目录 同步PDB文件到Symbols服务器 开发人员配置编译生成的本地symbols路径 对于windbg,可以在菜单“File”->“Symbol File Path...”填入编译时的pdb输出目录,多个目录用;隔开。 使用VS时,在菜单“Tools”—〉“Options”—〉“Bebugging”—〉“Symbols”面板中填入编译时的pdb输出目录。
2. 下载某个已运行进程所有相关模块的symbols,缓存到共享路径,便于其它人快速下载。 3. 下载某个exe/dll文件对应的symbols,例如user32.dll,输入命令行: 4. 下载整个目录下(例如system32)所有模块的symbols: |
在 Visual Studio 调试器中指定符号 (.pdb) 和源文件 [color=var(--info-dark)] 备注 本文适用于 Visual Studio 2015。 如果你正在寻找最新的 Visual Studio 文档,请在左上方使用版本选择器。 建议升级到 Visual Studio 2019。 [color=var(--info-dark)]在此处下载 程序数据库 (.pdb) 文件(也称为符号文件)将你在类、方法和其他代码的源文件中创建的标识符映射到在项目的已编译可执行文件中使用的标识符。 .pdb 文件还可以将源代码中的语句映射到可执行文件中的执行指令。 调试器使用此信息确定两个关键信息:显示在 Visual Studio IDE 中的源文件和行号,以及可执行文件中在设置断点时要停止的位置。 符号文件还包含源文件的原始位置以及(可选)源服务器的位置(可从中检索源文件)。 在 Visual Studio IDE 中调试项目时,调试器知道查找代码的 .pdb 和源文件的默认位置。 如果要在项目源代码之外调试代码(如项目调用的 Windows 或第三方代码),则你必须指定 .pdb(也可以是外部代码的源文件)的位置,这些文件需要与可执行文件完全匹配。 在 Visual Studio 2012 之前,在远程设备上调试托管的代码时,需要将符号文件放置在远程计算机上。 这种情况不会再出现。 所有符号文件必须位于本地计算机上或“工具”/“选项”/“调试”/“符号” 页中指定的位置。 调试器搜索 .pdb 文件的位置
调试器只会为可执行文件加载与该可执行文件生成之时所创建的 .pdb 文件完全匹配的 .pdb 文件(即该 .pdb 文件必须是原始 .pdb 文件或其副本)。 由于除了创建正确且高效的代码的主要任务之外,编译器的编译速度也得到了优化,因此可执行文件的实际布局可更改,即使代码本身未更改也是如此。 有关详细信息,请参阅 [color=var(--primary-base)]为什么 Visual Studio 要求调试器符号文件必须与同时生成的二进制文件完全匹配?。 指定符号位置和加载行为在 VS IDE 中调试项目时,调试器将自动加载位于项目目录中的符号文件。 可以在“工具”/“选项”/“调试”/“符号”中为 Microsoft、Windows 或第三方组件指定备选搜索路径和符号服务器。还可以指定希望调试器自动为其加载符号的模板。 之后,你可以在主动进行调试时手动更改这些设置。
Visual Studio 可从实现 symsrv 协议的符号服务器下载调试符号文件。 [color=var(--primary-base)]Visual Studio Team Foundation Server 和 [color=var(--primary-base)]Windows 调试工具 是可实现符号服务器的两个工具。 在 VS “选项” 对话框中指定要使用的符号服务器。 可供使用的符号服务器包括: Microsoft 公共符号服务器 若要调试在调用系统 DLL 或第三方库时出现的故障,通常需要使用系统 .pdb 文件,这些文件包含表示 Windows DLL、EXE 以及设备驱动程序的符号。 你可从 Microsoft 公共符号服务器获取这些符号。 除了 MDAC、IIS、ISA 和 .NET Framework之外,Microsoft 公共符号服务器为 Windows 操作系统提供符号。 若要使用 Microsoft 符号服务器,请选择 “调试” 菜单上的 “选项和设置” ,然后选择 “符号” 。 选择 “Microsoft 符号服务器” 。 内部网络或本地计算机上的符号服务器 你的团队或公司可为你自己的产品创建符号服务器,并作为外部源符号的缓存。 你自己的计算机上可能具有符号服务器。 你可在 VS “选项” / “符号” / “符号” 。 第三方符号服务器 Windows 应用程序和库的第三方提供程序可提供对 Internet 上的符号服务器的访问。 你还可在 “选项” / “符号” 页上输入这些符号服务器的 URL。 [color=var(--info-dark)] 备注 如果使用 Microsoft 公共符号服务器以外的符号服务器,请确保该符号服务器及其路径是可信任的。 由于符号文件可以包含任意可执行代码,因此你可能面临安全威胁。 调试时查找并加载符号 只要调试器处于中断模式,你就可以为之前被调试器选项排除的或编译器无法找到的模块加载符号。 可以从调用堆栈窗口、模块窗口、局部变量窗口、自动窗口和所有监视窗口的快捷菜单中加载符号。 如果调试器在没有可用符号或源文件的代码中中断,则将显示一个文档窗口。 在此可以找到所缺文件的相关信息,并采取相应措施来查找并加载它们。 使用未加载任何符号的文档页查找符号 调试器可通过多种方式中断没有可用符号的代码:
选项 描述 加载符号 尝试从 “选项” / “符号” / “选项” 对话框中指定要使用的符号服务器。 如果无法找到符号文件,则将启动文件资源管理器,以便你能够指定要搜索的新位置。 符号加载信息 显示已加载符号文件的位置或调试器无法查找文件时已搜索位置的信息。 符号设置... 打开 VS “选项” / “符号” / “选项” 对话框中指定要使用的符号服务器。 始终自动加载 将符号文件添加到由调试器自动加载的文件列表中。 为符号文件设置编译器选项 当你从 VS IDE 生成项目并使用标准 “调试” 生成配置时,C++ 和托管编译器将为你的代码创建相应的符号文件。 也可在命令行上设置编译器选项以创建符号文件。 C++ 选项 程序数据库 (.pdb) 文件保存调试和项目状态信息,使用这些信息可以对程序的调试配置进行增量链接。 使用 [color=var(--primary-base)]/ZI 或 /Zi (适用于 C/C++)生成时,将创建 .pdb 文件。 在 Visual C++中, [color=var(--primary-base)]/Fd 选项命名由编译器创建的 .pdb 文件。 使用向导在 Visual Studio 中创建项目时, /Fd 选项将设置为创建一个名为 project.pdb 的 文件 .pdb 文件。 如果使用生成文件生成 C/C++ 应用程序,并指定 /ZI 或 /Zi 而不指定 /Fd,则最终将生成两个 .pdb 文件:
调试器在下列位置查找源文件:
当调试器在源文件不可用的位置中断执行时,它将显示 “未加载任何源” 或 “未加载任何符号” 页,这些页可帮助你查找源文件。 当调试器无法找到可执行文件的符号 (.pdb) 文件来完成搜索时,将显示 “未加载任何符号” 。 “无符号”页将提供用于搜索文件的选项。 如果在执行选项之一后找到 .pdb,并且调试器可以使用符号文件中的信息检索源文件,则将显示源。 否则,将显示描述问题的 “未加载任何源” 页。 此页将显示选项链接,这些链接可执行可以解决问题的操作。 将源文件搜索路径添加到解决方案你可指定网络或本地目录来搜索源文件。
如果本地计算机上没有源代码,或者 .pdb 文件与源代码不匹配,则可使用源服务器来帮助调试应用程序。 源服务器接受文件请求并返回实际的文件。 源服务器通过名为 srcsrv.dll 的 DLL 文件运行。 源服务器读取应用程序的 .pdb 文件,该文件包含指向源代码存储库的指针,以及用于从该存储库检索源代码的命令。 你可以限制允许从应用程序的 .pdb 文件执行的命令,方法是在名为 srcsrv.ini 的文件内列出允许的命令,该文件必须与 srcsrv.dll 和 devenv.exe 位于同一个目录中。 [color=var(--primary-dark)] 重要 任意命令都可嵌入应用程序的 .pdb 文件中,因此请确保在 srcsrv.ini 文件中仅放入要执行的命令。 任何尝试执行不在 srcsvr.ini 文件中的命令都将导致出现一个确认对话框。 有关更多信息,请参见 [color=var(--primary-dark)]Security Warning: Debugger Must Execute Untrusted Command。 未对命令参数执行任何验证,因此请慎用受信任的命令。 例如,如果你信任 cmd.exe,恶意用户则可能会指定使该命令变得危险的参数。 启用源服务器的使用
|
64位vs2017可以运行调试32位工程; 有些错误可能是因为IDE不同版本导致的,例如vs2005工程在vs2017上运行出现一系列错误。 vs里32位项目和64位项目的区别:由于操作系统内存分配的不同,导致软件开发过程中,需要编译不同版本的软件。 在vs中, 注意:如果你的项目引用有32位的dll(c++编译生成的),则只能选择32位平台,否则也会报错,整个项目要保持一致。 在项目调试的过程中,我们可以看到32位与64位程序加载的dll不同。 64位系统中 32位程序从C:\Windows\SysWOW64中加载dll;而64位程序从C:\Windows\System32中加载dll。 |
|Archiver|手机版|小黑屋|firemail
( 粤ICP备15085507号-1 )
GMT+8, 2025-4-22 17:36 , Processed in 0.068469 second(s), 23 queries .
Powered by Discuz! X3
© 2001-2013 Comsenz Inc.