我的编程空间,编程开发者的网络收藏夹
学习永远不晚

.NET PDB文件是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

.NET PDB文件是什么

这篇文章主要讲解了“.NET PDB文件是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“.NET PDB文件是什么”吧!

PDB全称Program Database,不知道中文翻译叫什么。相信使用过VS的人对于这个拓展名的文件不会陌生,这个文件主要会存储对应模块(dll或者exe)内部的所有符号,以及符号对应的地址、文件名和行号。

这个文件会在我们调试的时候被使用到,这个东西可以理解为调试的时候应用程序和源文件之间的一个桥梁。正是归功于这个文件,我们才能在debug的时候看到程序当前执行相对应的代码和监视到一些变量。

PDB文件什么时候产生?

PDB文件是在我们编译工程的时候产生的,它是和对应的模块(exe或dll)一起生成出来的。我们一般可能不会意识到PDB文件的重要性,因为如果只是我们本地进行开发,我们总是能够进行调适。这里我要引入两个概念:Private Build和Public Build。Private Build指的是在开发机器上的编译,Public Build指的是在负责编译的机器上的编译。

正如上面我所说Private Build一般不会有问题,因为在编译出来的机器上进行调试所有必要的文件都在该在的地方。所有大部分不能调试的问题都发生在Public Build的情况下。

如果你的应用程序需要发布或者当作产品卖得,你就需要特别注意要保存你发布出去的那个版本的PDB文件和源文件。注意:你只有一次机会保存着发布出去的PDB文件,如果你弄丢了将无法找回。<当然使用Reflector 类似的工具去调试也是可以的>

为什么PDB这么重要?

也许你会认为如果拿一份一模一样的源代码重新编译一个PDB文件,然后用来调试就行了。我也曾经这么认为过,直到有一天&hellip;......

直接的原因是因为VS生成出来的二进制文件的Header部分里面包含了它对应的PDB的GUID,PDB也包含一个GUIID,这两个GUID实在编译的时候添加进去的。VS调试器在载入PDB的时候会去比对这个两个GUID,如果不一致,那么就不能使用。

当然上面那个原因只是一个表面现象,根本原因是既是两份一模一样的代码编译器编译出来的文件可能是不一样的。因为编译器在编译的时候会对代码进行优化,而同一份代码可能会有很多种优化的方法,它会根据当时的具体机器的环境等情况选择一个最快的生成方法。所以它生成出来的文件有可能是不一样的!所以如果连生成出来的文件都不一样,那么原来的那个PDB里面的符号对应的地址也就没有意义了。

如何查看二进制文件和PDB的GUID?

使用VS自带的DUMPBIN工具可以查看二进制文件所期望的PDB的GUID。基本用法就是DUMPBIN /HEADER 文件,具体用可可参考MSDN。

查看PDB的GUID可以用下面这个工具,直接将PDB拉进去即可。http://www.codeproject.com/Articles/37456/How-To-Inspect-the-Content-of-a-Program-Database-P

PDB文件的查找策略

先上试验结果,可以再调试的时候从Visual Studio 的Module串口中查找到一个module的symbol的查找策略。从截图中我们可以看到结果如下:

.NET PDB文件是什么

文件被执行或者被载入的地址

就是硬编码在PE文件头中的那个地址。大家可以看到obj\<config>才是最原始生成的地址,只是之后被拷贝到了***个地址中去了。

5 如果配置了符号服务器,第二步以后应该先去符号服务器的缓存目录下找,如果找不到再去符号服务器上去找。找到的话就会下载到缓存目录。

第三部分是我VS中设置的一些符号查询的目录,因为我装过Reflector所以默认加了这几个目录在我的设置中。

Windows文件夹。

这里有一个比较有意思的现象就是,VS的查找策略都是会先找一个目录下的symbol\exe\project.pdb,然后exe\project.pdb,***才找project.pdb。这个顺序有点出人意料。

PDB文件会影响性能么?

可能有些人会觉得PDB文件的生成会对最终的应用程序的性能产生一定的影响,所以觉得在发布版中不应该生成PDB文件。

错!对于.NET应用程序来说,生成PDB文件不会影响编译器的优化,所以也完全不会影响应用的性能。只会对于生成的程序集中的一个DebuggableAttribute的属性产生影响。有兴趣的人可以阅读Do PDB Files Affect Performance?

感谢各位的阅读,以上就是“.NET PDB文件是什么”的内容了,经过本文的学习后,相信大家对.NET PDB文件是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

.NET PDB文件是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

.NET PDB文件是什么

这篇文章主要讲解了“.NET PDB文件是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“.NET PDB文件是什么”吧!PDB全称Program Database,不知道中文翻译叫什么。
2023-06-17

.NET 是什么?

.NET是一种跨平台、开源的软件开发框架,由Microsoft开发,用于构建各种应用程序。它提供了跨平台支持、面向对象编程、垃圾回收和丰富的库。.NET可用于开发Web应用程序、桌面应用程序、移动应用程序和云应用程序。其优势包括提高开发效率、代码可重用性、性能优化和安全性。经过多年的发展,.NET7于2023年11月发布,并得到Microsoft和社区的广泛支持。
.NET 是什么?
2024-04-02

C#.Net通信共享内存映射文件是什么

这篇文章主要讲解了“C#.Net通信共享内存映射文件是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#.Net通信共享内存映射文件是什么”吧!节点通信存在两种模型:共享内存(Share
2023-06-30

怎么在pdb数据库中下载文件

你可以使用以下步骤在PDB数据库中下载文件:1. 打开PDB数据库的网站(https://www.rcsb.org/)。2. 在搜索栏中输入你感兴趣的蛋白质或者结构的PDB ID。3. 点击搜索按钮,找到对应的结果。4. 点击该结果的PDB
2023-08-30

windows驱动精灵net组件是什么

本篇内容主要讲解“windows驱动精灵net组件是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“windows驱动精灵net组件是什么”吧!驱动精灵net组件是什么:答:net组件一般是指
2023-07-01

mysqlfrm文件是什么文件

MySQL中的.frm文件是指存储表定义和结构的文件,以表名为基础,对应于每个MySQL表,包含了表的元数据信息,包括列名、数据类型、索引、约束等,当数据库启动时,MySQL会读取.frm文件的信息来还原表的结构,并且使用这些信息进行数据查
2023-07-25

Visual Studio .NET是什么

这篇文章主要介绍“Visual Studio .NET是什么”,在日常操作中,相信很多人在Visual Studio .NET是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Visual Studio .
2023-06-17

php文件是什么文件

PHP文件是一种文本文件,其文件扩展名为.php。它包含了PHP编程语言的代码,可以在服务器端进行解释和执行。PHP文件可以包含HTML、CSS和JavaScript等内容,用于生成动态的Web页面。当用户请求访问PHP文件时,服务器会解释
2023-09-05

.Net Framework中的委托与事件是什么

这篇文章主要介绍“.Net Framework中的委托与事件是什么”,在日常操作中,相信很多人在.Net Framework中的委托与事件是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”.Net Fram
2023-06-17

c#.net用什么软件

c#.net开发工具选择:最佳选择: visual studio,提供全面功能。轻量级选择: visual studio code,免费且易于使用,支持跨平台。高级选择: jetbrains rider,具有重构等高级功能。跨平台选择: m
c#.net用什么软件
2024-04-04

.NET中Entity Framework是什么

Entity Framework 是一个开发框架,用于从数据库中获取数据并管理数据对象。它是.NET平台的一部分,用于简化与关系型数据库的交互。Entity Framework 提供了一种对象关系映射 (ORM) 的方法,将数据库中的数据映
2023-09-22

ADO .NET组件有什么用

本篇内容介绍了“ADO .NET组件有什么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在一个数据集中查询符合特定条件的行时,使用基于AD
2023-06-17

什么是html文件

HTML文件是一种标记语言,用于创建网页。HTML代表超文本标记语言,它是Web编程的基础。HTML文件使用标记标签来描述文档的结构和内容,并使用超链接连接不同的文件和资源。HTML文件遵循一系列规则,这些规则确定了文档中各元素的行为和显示方式。HTML标记的标签被包含在尖括号中,例如,<html>和<body>。这些标记可以用于格式化文本、添加图像和其他媒体元素、创建超链接和
2023-05-14

kgtemp文件是什么

这篇文章主要讲解了“kgtemp文件是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“kgtemp文件是什么”吧!KGTEMP全称为“KuGou TEMP”,是酷狗音乐的缓存文件,其歌词的
2023-06-20

mysqlrpm是什么文件

"MySQL RPM文件是用于安装和管理MySQL数据库的软件包,具有以下优点:1、安装方便,可以方便地安装和升级MySQL数据库;2、自动化管理,自动执行必要的步骤;3、版本管理,可以方便地跟踪和管理MySQL数据库的版本和相关软件包的依
2023-08-02

spuninst.exe是什么文件

spuninst.exe是windows的系统安全更新程序。是一种Windows实用工具,位于%Windir%\$NTUninstallKB823182$\Spuninst 文件夹中,主要用来删除已经安装到Windows里的安全更新,如:M
2023-07-10

hprof是什么文件

hprof是什么文件?是java进程的内存镜像文件,里面包含了内存堆详细的使用信息。最近学习深入java虚拟机的书,照着里面的例子跑了下。如何打开hprof?下面是demo:/** * VM Args:-Xms20m -Xmx20m -XX:+HeapDump
hprof是什么文件
2018-01-10

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录