小弟学习windbg的使用,在visual studio2008下编了个小程序,用windbg调试,但怎么设置符号文件的目录,都不能看到函数名,怎么办啊

解决方案 »

  1.   

    启动WinDbg后,按Ctrl+S,在弹出的对话框内设置路径,例如:
    srv*D:\mysymbols*http://msdl.microsoft.com/download/symbols;cache*D:\mysymbols;
    ;E:\Project\MiniFilter\simrep\objchk_wxp_x86\i386
    用分号分隔,前面的是下载符号的保存路径,后面的是自己的本地符号路径。
      

  2.   

    把系统的pdb和本程序的pdb都按楼上加载到目录里就可以了
      

  3.   

    在disassembly里还是显示不出来函数名。用x Debug1!changeto4p 命令也找不到函数changeto4p的地址
      

  4.   

    你PDB文件设置不对,用lm命令看下加载了哪些符号
      

  5.   

    最后开始前 :.reload  一下。
      

  6.   

    我的symbol file path是这样设置的srv*F:\windbg*http://msdl.microsoft.com/download/symbols;C:\Documents and Settings\zx\My Documents\Visual Studio 2008\Projects\Debug1\Release
    lm后显示:
    start    end        module name
    00400000 00406000   Debug1     (deferred)             
    78520000 785c3000   MSVCR90    (deferred)             
    7c800000 7c91c000   kernel32   (deferred)             
    7c920000 7c9b4000   ntdll      (pdb symbols)          f:\windbg\ntdll.pdb\36515FB5D04345E491F672FA2E2878C02\ntdll.pdb
      

  7.   

    使用 Symbol Server 技术
    Microsoft Symbol Server 是使用 Debugging Tools for Windows 软件包附带的 SymSrv 技术 (SymSrv.dll) 构建的。SymSrv 会生成本地符号高速缓存,以进行快速、自动的符号解析。使用 Symbol Server 就像在符号路径中使用相应的语法一样简单。通常,语法的格式如下:
    SRV*your local symbol folder*http://msdl.microsoft.com/download/symbols 
    其中 your local symbol folder 是任何用作符号目标位置的驱动器或共享。例如,要在 WinDbg 调试器中设置符号路径,请在该调试器的命令窗口中键入以下命令:
    .sympath SRV*f:\localsymbols*http://msdl.microsoft.com/download/symbols
    要获取最新的 SymSrv 功能,必须安装最新的调试软件包。要获取 Debugging Tools for Windows 软件包的最新版本,请访问以下 Microsoft 网站:
    Microsoft 调试工具
    http://www.microsoft.com/whdc/devtools/ddk/default.mspx (http://www.microsoft.com/whdc/devtools/ddk/default.mspx) 
    有关 Symbol Server 技术的更多信息,请参阅随 Debugging Tools for Windows 软件包提供的 Debuggers.chm 帮助文件。
    回到顶端
    设置 _NT_SYMBOL_PATH 环境变量
    如果您在 _NT_SYMBOL_PATH 环境变量中提供了正确的 symsrv 语法,常见的 Microsoft 调试工具就会使用 SymSrv 技术。这些工具会自动包括您在该变量中提供为符号路径的任何内容。您可以将该变量设置为系统变量或用户环境变量。要从桌面上执行此操作,请右键单击我的电脑,然后单击属性。在高级选项卡上,单击环境变量。您也可以在命令提示符下临时设置该变量。如果采用此方法,通过命令提示符启动的所有应用程序都将继承该设置。例如:
    Set _NT_SYMBOL_PATH = symsrv*symsrv.dll*f:\localsymbols*http://msdl.microsoft.com/download/symbols
    回到顶端
    将 Microsoft Symbol Server 和 WinDbg 一起使用
    要在 WinDbg 中使用 Symbol Server 网站,请按照下列步骤操作: 
    启动 Windows 调试器 (WinDbg.exe)。
    在文件菜单上,单击符号文件路径。
    在符号路径框中,键入以下命令:
    SRV*your local folder for symbols*http://msdl.microsoft.com/download/symbols
    其中 your local folder for symbols 是在其中复制本地符号高速缓存的文件夹。调试符号将下载到此位置。注意:您可以指向计算机能达到的任意本地路径或共享位置;此位置不必是计算机硬盘上的位置。
    此外,您也可以在命令提示符下使用 .sympath 命令来设置符号路径。您可以将 symsrv 语法和其他符号路径组合在一起。例如,使用以下语法来指定两个或更多个符号路径:
    f:\BusObjSymbols;SRV*f:\localsymbols*http://msdl.microsoft.com/download/symbols
    该语法用分号来分隔符号路径。当您开始调试故障转储文件或应用程序时,Windows 调试器将检查它加载的模块的符号信息是否位于本地文件夹中。如果模块的符号信息不在本地文件夹中,WinDbg 将尝试从 Symbol Server 下载相应的符号文件或文件。如果您在具有不同文件版本的计算机上调试应用程序时使用相同的本地高速缓存,则将下载不同版本的符号,并将其同第一批符号存储在一起。SymStore 格式会按照映像的时间戳和大小(或校验和)来存储文件。因此,来自不同产品版本的符号可以并行共存。(SymStore.exe 是 Debugging Tools for Windows 软件包中生成符号服务器的实用程序。有关更多信息,请参阅产品文档。)由于下载符号文件需要一些时间,因此请记住,当您第一次调试应用程序时,调试器可能看上去停止了响应(挂起)。这是因为必须下载系统 DLL 的大多数符号文件(如 Ntdll.dll、Kernel32.dll 和其他文件)。
    回到顶端
    使用 SymChk.exe 实用工具下载符号
    您可以使用 SymChk.exe 实用工具,验证符号并以便捷、非侵入的方式生成本地符号高速缓存。SymChk.exe 实用程序随 Debugging Tools for Windows 软件包提供。SymChk.exe 是一种命令行工具。您可能需要将 Debugging Tools for Windows 软件包的文件夹添加到系统上的 PATH 环境变量,以便从任意命令提示符下访问该工具。要使用 SymChk.exe 实用程序下载 Windows\System32 文件夹中所有组件的符号文件,请使用以下命令行命令:
    symchk /r c:\windows\system32 /s SRV*c:\symbols\*http://msdl.microsoft.com/download/symbols
    在此示例中: 
    “/r c:\windows\system32”查找 System32 文件夹和所有子文件夹中的所有符号文件。
    “/s SRV*c:*http://msdl.microsoft.com/download/symbols”指定用于符号解析的符号路径。在此例中,“c:\symbols”是将在其中从符号服务器复制符号的本地文件夹。
    要获取 SymChk.exe 命令行选项的更多信息,请在命令提示符下键入 symchk /?。其他选项包括指定正在运行的可执行文件的名称或进程 ID (PID) 的功能。
    windbg加载程序或挂接程序后
    输入命令
    !sym noisy
    .reload -f
    重新加载符号,程序本身要生成符号文件才可以