vs的PDB文件

每天进步一点点,每天自信一点点。


之前看到过别人用PDB调试,也不知道在干啥,也不敢问,只是觉得很厉害。今天晚上没事学习一下。

包含内容

Native C++ PDB包含了如下的信息:

  • public,private 和static函数地址;
  • 全局变量的名字和地址;
  • 参数和局部变量的名字和在堆栈的偏移量;
  • class,structure 和数据的类型定义;
  • Frame Pointer Omission 数据,用来在x86上的native堆栈的遍历;
  • 源代码文件的名字和行数;

.NET PDB只包含了2部分信息:

  • 源代码文件名字和行数;
  • 和局部变量的名字;
  • 所有的其他的数据都已经包含在了.NET Metadata中了;

为什么release时也生成PDB

问:
Debug里有pdb,Release里也有pdb,他们有什么不同呢?
答:
Debug里的PDB是full,保存着调试和项目状态信息、有断言、堆栈检查等代码。Release 里的PDB是pdb-only,基本上:出什么错了+错误在哪行。
问:
为什么很多人都不喜欢pdb,欲除之而后快?
答:
因为很多人把PDB理解成:调试文件、Program Debug Database、会泄露代码机密,所以想将其删除,那只要在VS的 项目–>生成–>高级–>调试信息–>None便可

报错

VS中设置的断点无效:“当前不会命中断点,还没有为该文档加载任何符号”。问题主要出在没有生成调试信息。解决方法如下:
(1)项目-〉属性-〉配置属性-〉C/C+±〉常规-〉调试信息格式,这里不能为“禁用”。
(2)项目-〉属性-〉配置属性-〉链接器-〉调试-〉生成调试信息,这里设为“是”。

使用方法

包含了工程的所有信息。用于程序(模块)调试。
第一: 也是最简单的,就是直接将pdb文件放在执行文件的同一目录,那么vs就直接能找到了。
第二:设置pdb目录,然后加载。
这种适合某个解决方案有多个模块(多个pdb),输入文件也特别多,想要好好管理输出文件的情况下使用。 比如我输出的dll, exe就方法bin目录下,pdb文件就指定放在bin目录的同级目录pdb目录下, 运行时加载就可以了。具体配置方法如下:

配置生成位置:
当前工程右键属性 -> 配置属性 -> 链接器 -> 调试
右边 生成调试信息  选择是
生成程序数据库文件  选择刚才pdb目录+生成pdb文件名
配置加载pdb位置:
vs菜单栏  工具->选项->调试->符号
然后在右边添加pdb目录路径就可以了

PDB用途

用于调试。
可进入dll库调试。不管是本地dll调试还是附加到进程调试,如果dll工程中的pdb文件不存在了,则不能进入dll源码调试。

如果不再调试,平时可以删除pdb文件,因为每次运行会自动生成。

参考来源链接

感谢各位原作者的工作。

PDB文件:每个开发人员都必须知道的
vs设置调试符号pdb
VS无法断点调试,编译时为生成pdb文件,不包含调试信息(未加载任何符号)
.net里Release的pdb文件有什么用 是否可以删除
VS2015 让Release程序生成pdb文件

猜你喜欢

转载自blog.csdn.net/u011913417/article/details/118000888
今日推荐