windbg符号源代码与svn处理

环境:

1.    windows XP sp3 x86

2.       windbg 6.11

3.        svn, version 1.6.16 (r1073529) – 必须为英文版 ,因为 windbg perl 解析是针对英文输出来的,如果 svn 显示为中文,可以重命名 svn 目录下的 share 目录下的 locale 目录 ( 不知道还有其它配置方法没 )

4.       vc6.0

5.       perl

 

假设以下目录 :

<WINDBG_DIR>: windbg 的安装路径

<WINDBG_SRCSVR_DIR>: windbg 安装路径下的 srcsvr 路径

<SVN_EXE_DIR>: svn 的按照路径

<VC_DIR>: vc6.0 下包含 MSPDB60.DLL 的路径 一般为 : X:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin

<SRC_DIR>: 源代码路径,该路径下可以被 svn check/update

<SYMBOL_DIR>: 符号路径, pdb 文件所在目录

<SYMBOL_ON_SERVER>: 服务器上符号路径

 

操作步骤:

进行 index 前必须要求源代码与 pdb 匹配,且本地源代码与对应 svn 版本源代码一致

1.       设定环境变量 PATH :必须保证包含了 windbg 的安装目录, windbg 下的 srcsrv 目录, svn 程序的目录, vc6.0 的包含了 mspdb60.dll 的目录

2.       运行 svnindex /debug /symbols=<SYMBOL_DIR> /Source=<SRC_DIR> /User=xx /Pass=xx

SYMBOL_DIR SRC_DIR 最好是绝对路径,否则可能导致 svn 的输出与 pdb 文件中的源文件路径不匹配

/user/pass svn 服务器的用户名与密码信息 ( 建议不提供此信息 ) ,此处如果不提供则使用 svncache 的信息 .

如果提供了 user 信息,则 index 时会将此 user pass 嵌入到 pdb 文件的 sourceinformation 中,可以通过 srctool pdbstr 看到每个文件的参数信息

3.       检查运行结果,运行 srctool.exe <SYMBOL_DIR>/xxx.pdb 查看 pdb 文件的 index 结果

如没有文件被 index ,则单独运行 svn info –R <SRC_DIR> ,看输出的 path 字串后的路

径与运行 srctool <SYMBOL_DIR>/xxx.pdb –r 结果的路径是否一致 (pdb 文件中的路径

貌似总是绝对路径 ) ,如果不一致,则调整 svn 的参数路径,一致后,将这个路径更改为 svnindex SRC_DIR ,如果还是不能成功,则查看具体的 perl 文件,在找原因吧

具体的生成的源文件信息也可以通过 pdbstr –r –p:<SYMBOL_DIR>/xxx.pdb –s:srcsrv 查看

4.       pdb 中的源文件信息被正确的 index 后,可以通过 symstore 工具,将执行文件, dll pdb

等文件组成符号服务器信息

如果需要区别私有与公有符号文件,则需要用 binplace.exe 或者 pdbcopy.exe 处理公有私

有符号文件 (pdbcopy 的要求一个特殊的 mspdb60.dll ,找不到 )

symstore add /F <SYMBOL_DIR> /S <SYMBOL_ON_SERVER> /t myapp /r /z pri

 

 

windbg 加载时需要设定 !sympath srv*<SYMBOL_ON_SERVER> !srcpath srv*<SYMBOL_ON_SERVER> ,如果 index 过程中嵌入了 user 信息而此信息已无效,则从 svn 提取源文件会失败 ( 没验证 ) ,如果没有 user 信息,默认使用 svncache 的信息

 

附本机上运行的 bat 文件 :

makessindex.bat:

set PATH=%PATH%;D:/Program Files/Debugging Tools for Windows/srcsrv;D:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin

svnindex /debug /symbols="D:/myapp/publish" /Source="D:/myapp/src"

 

运行 srctool 验证 :

@echo off

echo srctool.exe 检查 ...

srctool.exe publish/debug/myapp.pdb >srcchk.txt

srcchk.txt

echo pdbstr.exe 检查 ...

pdbstr.exe -r -p:publish/debug/myapp.pdb -s:srcsrv >pdbstrchk.txt

pdbstrchk.txt

 

makesymbol.bat:

@echo off

set PATH=%PATH%;D:/Program Files/Debugging Tools for Windows

symstore add /F D:/myapp/myapp.* /S d:/symbols/pri /t mainapp /r /z pri

 

 

 

通过 UNC http 的访问

将前面已经 index 处理好了的 pdb 文件用

Walk <SYMBOL_DIR>/*.pdb srctool –x –d:<UNC_SRC_DIR>

提取到指定的 UNC_SRC_DIR

通过 walk 调用 cv2http.cmd ,修改 pdb 文件中的 index 信息 ( 如果需要保留版本关联的 index ,则这里修改 pdb 文件的副本 )

Walk <SYMBOL_DIR>/*.pdb cv2http.cmd MY_UNC_ALIAS //xl/pri_walk/src

//xl/pri_walk/src 为代码解压的路径,即 <UNC_SRC_DIR>

如果在 debugger srcsrv.ini 文件中的变量中设定了 MY_UNC_ALIAS 的值,则覆盖这里指定的 UNC_SRC_DIR

由于用的是 svn 版本, cv2http.pl 产生的 HTTP_EXTRACT_TARGET 不是适合 svn 的版本,所以需要修改 cv2http.pl ,这里复制了 cv2http.cmd pl ,改写了适合 svn 的版本

Pl 文件修改位置 :

#s/^SRCSRVTRG=.*/$alias=$url/nHTTP_EXTRACT_TARGET=%$alias%//%var2%//%var3%//%var4%//%fnfile%(%var1%)/nSRCSRVTRG=%http_extract_target%/i;

    s/^SRCSRVTRG=.*/$alias=$url/nHTTP_EXTRACT_TARGET=%$alias%//%var3%//%var4%//%fnfile%(%var1%)/nSRCSRVTRG=%http_extract_target%/i;

 

完成 pdb 文件 index 的修改后,按照与上面 svn 相同的步骤 symstore 等等

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值