注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gmd20的个人空间

// 编程和生活

 
 
 

日志

 
 

Visual Studio 2010 调试或者性能分析时看不到系统dll的函数名字的解决办法(配置调试符号搜索路径)  

2012-08-01 17:25:22|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
        一般调试时不会跟进去系统的dll里面,所以也没什么大的影响,但使用它的自带的性能分析工具的话,看到系统dll里面函数名字就很不爽了。 不知道自己的代码调用系统的那个函数,那些调用树也没法看。  使用的intel  vtune 或者,very sleepy 这些工具,人家不用系统的dll的pdb文件,也是能够解析出函数名字来的。但是微软的工具就是需要pdb,很是不好啊。kernell.dll   ntdll.dll 等等的这些系统自带的,非要到你微软的服务器上去下载一下 对应的调试符号。烦死了, 就不能像人家弄个直接解析pe文件的输入表输出表什么的,认出名字就可以了,那样碰到第三方的dll 也可以正常认出名字来。    微软的这个东距碰到第三方dll,不能搞到pdb调试符号还是不行了。
     

  2012 -10-19 补充。

   菜单  tool -》 option -》 debugging -》 native  -》 load dll exports   这里有个设置,勾了之后,按道理是会解析 dll中的 导出函数符号的。 详细说明见 http://msdn.microsoft.com/en-us/library/11t5bawk.aspx

 在调试的时候,模块窗口上 第三方的dll也看到提示说 load  dll exports了。但是性能分析工具里面好像不会去使用这个功能,第三方dll export 表里面的函数调用依然是没有显示出名字来。 这个不知道是不是visual studio的bug来的。  反正我我是没发现能在性能分析工具里面显示那些没有pdb调试符号文件的第三方dll了。  这个是一个比较有用的功能啊,都没有 intel  vtune ,very sleepy这些工具做的好。

值得注意的是 , 微软的调试符号信息是全部放到 pdb文件里面,不是想 linux 平台那样插入到elf文件的debuginfo 的section里面。  他只是在dll 里面保存对应的 pdb文件的名字而已。 所以调试时如果他不能根据路径找到pdb文件,还是老老实实的 手工加载对应的pdb文件。 对于微软系统自带的dll ,还是要老老实实去微软的服务器上下载 pdb文件。

     
        首先尝试一次性的吧 所有的系统符号下载回来。然后默认解压到 c:\windows\symbols文件夹里面去,然后配置visual stuido 让它到这里去搜索调试符号。
 Download Windows Symbol Packages
http://msdn.microsoft.com/en-us/windows/hardware/gg463028.aspx

        不过,发现还是有些dll 的调试符号找不到,看上去是版本不对,上一个页面下载下来的应该是官方标准版,但系统打过补丁之后,可能dll版本就不一定跟原版的一样了。唉,还是在visual studio 里面配置,让他自动到微软的服务器去下载对应的好了。像下面这样,调试时,中断下来,对应的dll找不到符号,然后右键,选 load from   Microsoft symbols server。他就自动下载 pdb文件下来放到你指定的cache目录里面。我手动再把下载下来的pdb文件放到c:\windows\symbols\dll 目录里面去,覆盖那些错误的版本,以后就不用每次都要下载了。

配置调试符号     菜单  tool -》 option -》 debugging -》 symbols  ,添加指定的路径或者server , visual studio 2010 默认帮你设置好微软的服务器了,勾上就可以了。

Visual Studio 2010 调试或者性能分析时看不到系统dll的函数名字的解决办法(配置调试符号搜索路径) - widebright - widebright的个人空间
Visual Studio 2010 调试或者性能分析时看不到系统dll的函数名字的解决办法(配置调试符号搜索路径) - widebright - widebright的个人空间
 

 

这样 performance  analysis 的时候,profile的结果就能看到 系统dll 的函数名字了。
Visual Studio 2010 调试或者性能分析时看不到系统dll的函数名字的解决办法(配置调试符号搜索路径) - widebright - widebright的个人空间
 




MSDN的参考资料
How to: Use a Symbol Server
http://msdn.microsoft.com/en-us/library/b8ttk8zy.aspx

Setting Your Symbol Path in Visual Studio 2010
http://blogs.msdn.com/b/visualizeparallel/archive/2010/04/20/setting-your-symbol-path-in-visual-studio-2010.aspx

Symbol Stores and Symbol Servers
http://msdn.microsoft.com/en-us/library/ff558840.aspx

Microsoft Public Symbols
http://msdn.microsoft.com/en-us/library/ff552208.aspx




  评论这张
 
阅读(733)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017