这并不是说您必须拥有PDBs和二进制部署来获得关于异常的额外信息 。同样可以使用符号服务器和源索引来实现,我将在下面的主题中讨论 。
和PDB安全风险吗?
任何使用DLL/EXE的人都可以很容易地进行反向工程,使用诸如反射器之类的工具来生成带有或不带PDB的源代码 。因此,在这种情况下,不提供PDB将不会有多大帮助 。
如果PDB被部署,并且用户无法访问二进制文件,那么向他们显示堆栈跟踪信息并让他们知道应用程序的内部信息不是一个好主意 。
Symbol Server
符号服务器
符号服务器用来存储被调试器所知道的pdb文件,可以用来查找更详细的调用堆栈信息 。
我们可以使用symstore.exe设置自己的符号服务器,它允许调试器找到与二进制相关的实际PDB 。symstore.exe包含在窗口包的调试工具中 。
微软还保留了符号服务器,我们可以通过从微软的符号服务器加载PDBs来使用它 。
如何以及为什么加载微软符号存储?
当您在debug点和open Modules窗口停止执行时(如下所示),您将会发现所有的dll(外部或内部)加载到该断点之前,但是默认情况下的符号状态将显示“无法找到或打开pdb文件”,除了您的pdb 。这些是Microsoft BCL二进制文件,因为我们的调试器找不到相关的PDBs,所以没有加载 。
文章插图
要加载这些符号,可以去Debugging->Symbols,并检查微软的符号服务器,并将缓存符号作为任何共享文件夹在这个目录中提供,以便所有的开发人员都可以使用它 。
由于这些二进制文件是您的应用程序之外的,所以您还需要在Debugging->General 菜单中取消 “Enable just my Code”。
在下面的截图中,您可以看到我已经加载了符号,现在符号的状态显示了“Symbols loaded” 。
未加载pdb文件解决方法,无法查找或打开pdb文件 。小编来告诉你更多相关信息 。
无法查找或打开pdb文件
文章插图
这怎么有用呢?
您可以在代码中放置断点,并在没有加载符号的情况下查看调用堆栈 。
下图显示了没有加载符号的调用堆栈,它只是将我的方法和BCL的方法显示为[外部代码] 。
文章插图
在加载了这些符号之后,调用栈将在断点之前显示所有的方法调用(参见下图) 。当我们想知道调用的外部方法是什么时,它当然是有帮助的,这样它就可以使用反射器或调试拆解来分析,而在我们的应用程序中,由于外部代码而导致某些行为更改的任何特定问题 。
文章插图
与符号服务器一样,也有称为源服务器的东西,用于检索用于构建任何特定应用程序的源文件的确切版本 。在构建时,二进制文件可以被索引,并且该信息存储在PDB文件中,它帮助源服务器找到确切的源文件 。
您可以检查MSDN了解更多关于符号和源存储 。
PDB文件是微软专有格式的文件,也没有提供什么文档详细介绍 。因为微软并未公布PDB内部细节,所以对于这个文件一直是一个迷 。
上述就是无法查找或打开pdb文件 跟 未加载pdb文件解决方法的电脑IT小方法,供您全面了解参考!
推荐阅读
- 未成年工不发工资要怎么维权
- 哪些人不适合喝枸杞水 哪些人不适合喝枸杞蜂蜜
- 进口牛排选购终极指南 进口牛排价格表
- 苹果iOS17仍未支持侧载 苹果不支持插件什么意思
- 三星S21屏幕出现粉色长线像摔坏了一样 官方未回应
- 未时是几点到几点
- 未时是几点
- 郑州小升初未被民办录取后还可以选择公办吗?
- 未满十八岁可以直播吗 未满十八岁能在b站直播吗
- 苹果尚未接入互联网是什么意思 苹果尚未接入互联网的含义