遇到Visual Studio "当前不会命中断点.还没有为该文档加载任何符号"的情况

摘要:
但是,会给出提示“当前不会命中断点。尚未为此文档加载任何符号”。这很奇怪。因此,a.exe在调试时直接调用旧的B.dll文件,因此无法进行调试(.pdb文件存储调试信息。修改dll文件的源代码后,它不再与旧的dll文件匹配)。

一.问题及原因

有这样一种调用逻辑:A.exe调用B.dll.现在想要在B的源代码中打断点,从A发起进行调试,却给出了"当前不会命中断点.还没有为该文档加载任何符号"的提示.感觉十分奇怪,各种重新生成,重启VS都没啥用,最后不得以网上搜了一番,找到了问题的根源.

原来我把旧的B.dll文件拷到了A.exe所在的目录下,导致A.exe调试时直接去调用旧的B.dll文件,而旧的dll文件对应的.pdb文件早已经不存在了,因此无法进行调试.(.pdb文件中存储着调试信息.dll文件源代码修改后,重新生成就生成了新的.pdb,和旧的dll文件不再匹配.)


(以下是参考资料) 

二..pdb的更多介绍

在 Windows 系统中,符号文件以 .pdb 为扩展名.每个模块被载入的时候(EXE和DLL都可以称之为模块),其相同名字的PDB文件同时被载入。所以Debug模式下,不仅因为代码没有优化,同时因为要载入PDB文件,所以Debug模式下的程序执行速度非常慢。

每个模块只会生成一个相同名字的PDB文件,并且模块生成的同时,会校验PDB文件生成GUID记录在模块内。这是因为调试时,调试器强制要求每个模块必须和PDB文件保持一致。实验过程中,用之前生成的PDB文件替换当前生成的PDB文件时,Debug窗口会显示No symbols loaded. MSDN也做了相应的说明:The debugger will load only a PDB for a binary that exactly matches the PDB that was created when the binary was built.

PDB文件中记录了源文件路径的相关信息,所以在载入PDB文件的时候,就可以将相关调试信息与源码对应。这样可以可视化的实时查看调试时的函数调用、变量值等相关信息。模块当中记录的PDB文件是绝对路径。所以只要模块在当前电脑上载入,调试器自然地会根据模块当中的路径信息找到相应PDB文件并载入。同样PDB文件中记录的源文件路径也是绝对路径,所以PDB文件只要在当前电脑上载入,调试进入相应模块时,都能够匹配到记录的源文件,然后可视化地查看相应信息。

如果源文件找不到,那么依然能够查看调试信息,只是这个时候只能查看汇编代码,不能通过源文件可视化查看信息。一般情况下,绝大多数C++程序员不具备阅读汇编代码的能力。所以完全通过PDB文件调试,意义与作用均没有多大。如果要让其他人能够调试自已的代码,PDB文件和源码都应该提供,只提供PDB文件的意义不大。如果确实有类似的需求,可以保留相应生成的PDB文件。微软的很多库默认是不提供PDB文件的,但是近来微软逐渐开放了一些库的PDB文件。

三.利用.pdb调试dll

1. 写一个调用Dll中函数的控制台测试程序test。
2. 设置test,将debug下编译连接生成dll和lib复制到.exe所在路径,使得test能够运行起来。
3. 将与dll一同产生的debug文件夹下的pdb文件复制到sln所在路径下,运行调试test,F11就能够进入所调用的dll中的函数。

四.其他可能的原因:

1.没有附加到正确的进程

2. 

参考资料:

1.https://blog.csdn.net/wqfhenanxc/article/details/80674223

2.https://blog.csdn.net/u011595231/article/details/17244109

免责声明:文章转载自《遇到Visual Studio "当前不会命中断点.还没有为该文档加载任何符号"的情况》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇各种数据分析工具所能处理的数据量大概是多少?HTML5新特性之文字转语音下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

hbase协处理器编码实例

Observer协处理器通常在一个特定的事件(诸如Get或Put)之前或之后发生,相当于RDBMS中的触发器。Endpoint协处理器则类似于RDBMS中的存储过程,因为它可以让你在RegionServer上对数据执行自定义计算,而不是在客户端上执行计算。 本文是以上两者的简单实例,使用的环境:环境 jdk1.8 hadoop2.6.5 hbase1.2....

Linux--查询文件的第几行到第几行命令

cat catalina.out | tail -n +14000 | head -n 10000 | sort | uniq -c linux 如何显示一个文件的某几行(中间几行)【一】从第3000行开始,显示1000行。即显示3000~3999行cat filename | tail -n +3000 | head -n 1000 【二】显示1000行...

Linux下统计代码行数

使用wc统计代码行数 最近写了一些代码,想统计一下代码的行数,在eclipse中好像没这功能,网上搜了一下才发现原来Linux有一个统计文件行数的命令wc。使用wc可以打印出每个文件和总文件的行数、字数和字节数,如果没有指定文件,则会读取标准输入(一般是终端)做统计。格式如下: Usage: wc [OPTION]... [FILE]......

3. Android程序生成步骤

  主要流程如下图所示:       所需要的工具列表 名称 功能介绍 在操作系统中的路径 aapt Android资源打包工具 ${ANDROID_SDK_HOME}/platform-tools/appt aidl Android接口描述语言转化为.java文件的工具 ${ANDROID_SDK_HOME}/platform-tools...

下载文件夹的解决方案

ASP.NET批量下载文件的方法 这篇文章主要介绍了ASP.NET批量下载文件的方法,实例汇总了常见的asp.net实现批量下载的方法,具有一定的实用价值,需要的朋友可以参考下 本文实例讲述了ASP.NET批量下载文件的方法。分享给大家供大家参考。具体方法如下: 一、实现步骤 在用户操作界面,由用户选择需要下载的文件,系统根据所选文件,在服务器上创建用于存...

tomcat服务器的搭建

一、准备工作 首先第一步就是到一个相对正规的网站下载一个java-jdk的安装包,(建议下载7.0或者8.0版本的,比较稳定) 二、安装java-jdk java环境的配置应该都学过吧,这里简单的讲一下。下载安装java JDK,注意安装的路径,我们需要进行环境变量的配置。    三、环境变量的设置   1、安装完成以后,配置环境变量环境变量的配置这里就以...