VS如何在调试时进入到dll文件
背景:
项目A:用C#写的一个类库文件
项目B:引用项目A的dll文件,完成编码,也是C#编写的。
需求:怎么能在调试的时候,调试断点能够从项目B中进入项目A中的代码。
解决办法就是:
假设,项目B引用的项目A的dll文件是 a.dll ,并且a中没有引用项目A中其他的文件或者命名空间。如果a.dll中还引用了A项目下的其他命名空间的内容,如a2,那么在下面的操作也要包含a2的对应部分。
将项目A下A.Web文件夹下bin文件夹(即路径:A/A.Web/bin/ )下的 a.dll与a.pdb文件,同时拷贝到B项目的外部引用文件夹下。这个"同时" 的含义是保证dll与pdb文件是同一个版本的。也就是说,你不能用时间点1的dll配合时间点2的pdb文件来进行调试进入dll的操作。如果a中还引用了a2命名空间的内容,那么必须也将a2.dll与a2.pdb文件同时拷贝过去,这个同时的含义同上。并且这个a2与a也是同时的。
这些准备好了之后,B项目中重新生成,在B项目中,在你引用a.dll中函数的地方加断点,单步调试即可进入A项目中对应的被调函数。
表达上可能有含糊或者不准确的地方,还请批评指正。
实例说明:
在PMCost项目中,部分代码如下,19行红色框内的函数引用自ACore项目中的Common命名空间下AjaxMethodAttribute.cs,我们知道,在生成dll的时候AjaxMethodAttribute.cs下的函数会被包含在ACore.Common.dll下。

并且AjaxMethodAttribute.cs中只引用了system及其两个子类,并没有引用 PMCost项目下的其他自定义命名空间。所以在拷贝的时候只需要拷贝ACore.Common.dll 及ACore.Common.pdb即可。


将两个文件拷贝到PMCost项目的外部引用中,在函数调用位置之前加断点,单步调试即可进入dll中。


VS如何在调试时进入到dll文件的更多相关文章
- CLR调试时的sos.dll/clr.dll/mscorwks.dll/mscordacwks.dll等动态库的版本对应
大家都知道,在调试托管代码时,一定会加载到sos/clr/mscorwks/mscordacwks这些动态库,才能够很好的完成我们的调试工作,那么他们的版本对应关系是怎样的呢,特别是clr.dll/m ...
- MVC打包压缩JS&CSS文件调试时过滤了一些文件
BundleTable.这个确实是比较好用,打包并压缩了CSS,使之加载时减少流量. 但是在调试的时候会疑问为何有很多JS,CSS文件无法打包,其实是因为调试时VS自动过滤了如下文件: 后台跟踪了 ...
- 调试带有源代码的DLL文件
工作环境:dll源代码是c,在Visual studio 2010中调试. 第一步,调试的准备. 用C#语言编写一个测试dll文件的程序,由于dll源程序是c的,且运行结果是黑屏的,所以C#代码也是运 ...
- Eclipse Jetty调试时无法保存js文件
Jetty会使用内存映射文件来缓存静态文件,包括js,css文件. 在Windows下,使用内存映射文件会导致文件被锁定,所以当Jetty启动的时候无法在编辑器对js或者css文件进行编辑. 解决办法 ...
- msdia80.dll文件出现在磁盘根目录下的解决方案
情况描述: 当安装某些软件后,磁盘根目录中多出了msdia80.dll文件,该文件显示为2006年12月1日,884KB. 原因: 当使用64位操作系统时,在电脑上安装 Microsoft Vis ...
- vs2010下C++调用lib或dll文件
注: DLL:表示链接库,包含dll,lib文件: dll: 表示my.dll文件 lib: 表示my.lib文件 C++ 调用.lib的方法: 一: 隐式的加载时链接,有三种方法 1 设置工程的 ...
- DLL文件修复
当你在Windows计算机中安装非操作系统的软件时,往往会覆盖或改写系统共享文件, 如动态链接库(.dll文件)和可执行文件(.exe文件). * 对于Windows系统来说,当用户操作不当(如非正常 ...
- msdia80.dll文件出现在磁盘根目录下的解决方案(转)
情况描述: 当安装某些软件后,磁盘根目录中多出了msdia80.dll文件,该文件显示为2006年12月1日,884KB. 原因: 当使用64位操作系统时,在电脑上安装 Microsoft Vis ...
- 非系统盘根目录出现msdia80.dll文件,能否删除?
出现此问题的原因:计算机上安装了 Microsoft Visual C++ 2005 可再发行组件时,Msdia80.dll文件被错误安装在其他驱动器的根文件夹中. 它的正确路径应该是"C: ...
随机推荐
- JavaScript中的Generator函数
1. 简介 Generator函数时ES6提供的一种异步编程解决方案.Generator语法行为和普通函数完全不同,我们可以把Generator理解为一个包含了多个内部状态的状态机. 执行Genera ...
- PostgreSQL条件表达式 case when then end
例: SELECT CASE WHEN (store_size <= (100)::NUMERIC) THEN '小店'::TEXT WHEN (store_size >= (200):: ...
- ES5-ES6-ES7_字符串扩展—模板字符串
includes(), startsWith(), endsWith() 传统上,JavaScript只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中.ES6又提供了三种新方法 ...
- 【NOI2019模拟】搬砖
[NOI2019模拟]搬砖 Description 小火车很穷,只好去搬砖了. 小火车被工头要求搭建\(n\)座塔,第i个高度为\(H_i\),也就是由\(H_i\)块砖头组成.每次小火车可以携带至多 ...
- PHP到底有多牛?你所知道的网站都在用它
PHP到底有多牛?你所知道的网站都在用它 提起PHP,很多人的第一印象就是网站开发,确实,在网站开发方面,PHP难逢对手,当之无愧是“世界上最好的语言”. 有数据显示,目前全球5000万互联网网站中, ...
- Python:Day46 Javascript DOM
history对象: History 对象包含用户(在浏览器窗口中)访问过的 URL.窗口之间是相互独立的. <input type="button" onclick=&qu ...
- RabbitMq 6种使用模式
RabbitMQ的5种模式与实例 1.1 简单模式Hello World 功能:一个生产者P发送消息到队列Q,一个消费者C接收 生产者实现思路: 创建连接工厂ConnectionFactory,设置服 ...
- bzoj2721 [Violet5]樱花
bzoj2721 [Violet 5]樱花 给出 \(n\) 求 \(\frac{1}{x}+\frac{1}{y}=\frac{1}{n!}\) 的正整数解数量 \(\bmod (10^9+7)\) ...
- (折扣计算)需求说明:普通顾客购物满100元打9折;会员购物打8折;会员购物满200元打7.5折(判断语句if-else和switch语句的嵌套结
package com.summer.cn; import java.util.Scanner; /** * @author Summer *折扣计算 需求说明:普通顾客购物满100元打9折:会员购物 ...
- centos7 开放3306端口并可以远程访问
开启远程访问: GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; 允许任何ip以roo ...