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

一.问题及原因

有这样一种调用逻辑: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.https://blog.csdn.net/wqfhenanxc/article/details/80674223

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

转载于:https://www.cnblogs.com/Stephen-Qin/p/10458810.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java01基础简介

1 java概述 开发服务器端应用程序最流行语言,产生网页、运行后端逻辑。 当对java了解到一定程度,阅读源码才能解决问题。 Applet:在网页中运行的java程序, Java的应用领域: 桌面应用系统开发 企业级应用开发 多媒…

TensorFlow自带例子已经包含了android和ios下的摄像头图像分类示例Inception v1,这里补充一个Windows下的,使用AForge库(www.aforgenet.com)操作

TensorFlow自带例子已经包含了android和ios下的摄像头图像分类示例Inception v1,这里补充一个Windows下的,使用AForge库(www.aforgenet.com)操作摄像头。 代码在这里下载,使用Visual Studio 2017编译。 http://files.cnblogs.com/files/autos…

Docker+Mongodb

DockerMongodb 原文:DockerMongodbdocker search mongodb docker run -d -p 2701:27017 -v /usr/mongodb/data:/data/db -v /usr/mongodb/databack:/data/backup --name mongo-v1.0.0 mongo --auth docker exec -it mongo-v1.0.0 mongo admin docker exec -it mongo-v1.0.…

Java02继承

5继承 5.1 类、超类和子类 关键字extends表示继承。 Java中的继承都是公用继承,没有C中的私有继承和保护继承。 Super class Subclass 来自于集合的术语 Base class Derived class Parent class Child class 将通用的功能放在超类中,将具有特…

BP神经网络与Python实现

人工神经网络是一种经典的机器学习模型,随着深度学习的发展神经网络模型日益完善.联想大家熟悉的回归问题, 神经网络模型实际上是根据训练样本创造出一个多维输入多维输出的函数, 并使用该函数进行预测, 网络的训练过程即为调节该…

《关于长沙.NET技术社区未来发展规划》问卷调查结果公布

那些开发者们对于社区的美好期待 2月,长沙.net 技术社区自从把群拉起来开始,做了一次比较正式、题目为《关于长沙.NET技术社区未来发展规划》的问卷调查,在问卷调查中,溪源写道: 随着互联网时代的到来,互联…

Java03接口与内部类

6 接口与内部类 接口 interface 对象克隆 内部类 inner class 代理 proxy 6.1 接口 public interface Comparable<T> {int compareTo(T other); }Arrays.sort(Object[] a) 利用的是mergesort 接口也可以被扩展 public interface Moveable {void move(double x, doub…

第一节:ASP.NET开发环境配置

第一节&#xff1a;ASP.NET开发环境配置 什么是ASP.NET&#xff0c;学这个可以做什么&#xff0c;学习这些有什么内容&#xff1f; ASP.NET是微软公司推出的WEB开发技术。 2002年&#xff0c;推出第一个版本&#xff0c;先后推出ASP.NET2.0&#xff0c;和ASP.NET3.5&#xff0c…

深度学习笔记之win7下TensorFlow的安装

最近要学习神经网络相关的内容&#xff0c;所以需要安装TensorFlow。不得不说&#xff0c;安装TensorFlow的感受就像是大一刚入学学习C语言时&#xff0c;安装vs时一样&#xff0c;问题一大堆&#xff0c;工具都装不好&#xff0c;还学啥呀。好在&#xff0c;就在昨晚&#xff…

Java04异常、断言、日志和调试

11 异常、断言、日志和调试 异常处理&#xff08;exception handing&#xff09; 使用断言来启动检测 Java日志框架 调试技巧 11.1 处理错误 如果一个方法不能够采用正常的途径完成任务&#xff0c;就通过另外一个路径退出方法。 在这种情况下&#xff0c;方法不返回任何…

全双工与半双工的区别

1、全双工传输 (英文Full&#xff0d;Duplex &#xff09; 是指交换机在发送数据的同时也能够接收数据&#xff0c;两者同步进行&#xff0c;这好像我们平时打电话一样&#xff0c;说话的同时也能够听到对方的声音。目前的交换机都支持全双工。全双工的好处在于迟延小&#xff…

人脸识别经典算法一:特征脸方法(Eigenface)

这篇文章是撸主要介绍人脸识别经典方法的第一篇&#xff0c;后续会有其他方法更新。特征脸方法基本是将人脸识别推向真正可用的第一种方法&#xff0c;了解一下还是很有必要的。特征脸用到的理论基础PCA在另一篇博客里&#xff1a;特征脸(Eigenface)理论基础-PCA(主成分分析法)…

Java05泛型

12 泛型 12.1 为什么使用泛型 泛型程序设计&#xff08;Generic programming&#xff09;&#xff1a;意味着编写的代码可以被很多不同类型的对象所重用。 类型参数&#xff08;type parameters&#xff09; 通配符类型&#xff08;wildcard type&#xff09; 可以将Manage…

bitmap转换为drawable

Bitmap bitmap MediaStore.Images.Media.getBitmap(this, Uri.parse(string)); Drawable drawable new BitmapDrawable(bitmap);// 这样就转换成drawable格式&#xff0c;可以设置背景图片了转载于:https://www.cnblogs.com/Nigeria/p/10471028.html

numpy的下载与安装教程——(解决No module named numpy问题)

NumPy函数库是Python开发环境的一个独立模块&#xff0c;而且大多数Python发行版没有默认安装NumPy数据库&#xff0c;因此在安装Python之后必须单独安装NumPy数据库。 进入Python shell开发环境后输入 [python] view plaincopy from numpy import* 如果出现No module named …

Xception

The First ColumnThe Second Columnpadding 方式&#xff1a;same and valid The First ColumnThe Second ColumnSame 就是 增加一列相同的数 &#xff08;一般是0&#xff09;valid只保留有效的转载于:https://www.cnblogs.com/hugeng007/p/10477430.html

1.苍穹外卖-day01

苍穹外卖-day01 课程内容 软件开发整体介绍 苍穹外卖项目介绍 开发环境搭建 导入接口文档 Swagger 项目整体效果展示&#xff1a; 管理端-外卖商家使用 用户端-点餐用户使用 当我们完成该项目的学习&#xff0c;可以培养以下能力&#xff1a; 1. 软件开发整体介绍 作为一名…

7 用户和用户组

7.1 用户配置文件 7.1.1 用户信息文件 /etc/passwd man 5 passwd 查看配置文件功能 第1字段&#xff1a; 用户名称 第2字段&#xff1a; 密码标志 X代表有密码 如果用户没有密码&#xff0c;则只允许本地登录 第3字段&#xff1a; UID&#xff08;用户ID&#xff09; 0…

C#调用Python模块

编程&#xff1a;C#调用Python模块 当下&#xff0c;C#与Python都是比较热门的计算机编程语言&#xff0c;他们各有优缺点&#xff0c;如果能让他们互相配合工作&#xff0c;那是多么美好的事情&#xff0c;今天我来讲解一下如何利用C#来调用Python。 如果让C#支持调用Python模…

面试简单整理之克隆

61.为什么要使用克隆&#xff1f; 克隆获取对象的副本&#xff0c;直接用复制还是一个引用。 62.如何实现对象克隆&#xff1f; 1.被clone的类实现cloneable接口&#xff0c;重写object类的clone&#xff08;&#xff09;方法 2.如果深克隆则克隆对象的引用对象也要实现接口、重…