热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如果输出目录不是调用应用程序正在调用的位置,则不会命中C#Dll调试断点

根据

根据debug-from-the-dll-project


DLL输出是否有解决方法,不是调用应用程序正在调用的位置?

我想通过start external program调试DLL,程序将在启动时加载DLL。也就是说,程序启动后,我直接按下F5而不是attach to process

为了不污染真实目标目录,我通过构建后事件将dll和pdb复制到真实目标目录。

但是断点没有命中。

为此有任何解决方法吗?


我认为我应该用尽可能少的单词来描述这个复杂的问题。

现在我有两个名为ProjectExeProjectDll的项目。

ProjectExe的输出目录为:D:\ProjectExe\bin\

ProjectDll的输出目录为:D:\ProjectDll\bin\

D:\ProjectExe\bin\中有一个名为Plugins的目录,所以它是D:\ProjectExe\bin\Plugins\

ProjectDll 构建后事件命令行:

XCOPY D:\ProjectDll\bin\*.dll D:\ProjectExe\bin\Plugins\ /Y
XCOPY D:\ProjectDll\bin\*.pdb D:\ProjectExe\bin\Plugins\ /Y

ProjectExe输出一个a.exe,它将在启动后D:\ProjectExe\bin\Plugins\加载Assembly.LoadFrom(string path)内的所有dll。

这是ProjectDll的设置:

如果输出目录不是调用应用程序正在调用的位置,则不会命中C#Dll调试断点

好的,现在我从ProjectDll按F5,启动a.exe,然后触发a.exe来调用dll中的方法,但要调用ProjectDll中的断点没有击中 !!!

如果现在我分离,请手动重新连接到a.exe进程,然后触发a.exe来调用dll中的方法,即断点 hit ! / p>

所以我的问题是在这种情况下如何在不重新连接的情况下达到断点?




  

但是断点没有命中。为此有任何解决方法吗?

我在机器上对其进行了测试,并且可以正常工作。所以我认为它也应该对您有用,请检查:


  1. 如果遇到这样的事情:

    enter image description here

    请确保您的调用应用程序使用的程序集版本与当前库项目相同。


  2. 按F5键后,汇编代码中的断点什么都没有发生,即使是#1之类的简单警告。请检查调试器是否可以通过调用应用程序中的Main()方法进入您的库方法。

    例如:我有CallingApp和CalledDll两个项目。当我在CalledDll项目中调试时,除非引用该CalledDll.dll并在CallingApp的Main()方法中调用它的函数,否则不会打断点。(或Main调用的方法,我们必须确保在CallingApp中运行时.exe,它将最终输入CalledDll的代码)




推荐阅读
  • 我有2个数组。一个称为x,具有30个图像值。另一个是与数组x中每个图像值对应的 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 代理模式的详细介绍及应用场景
    代理模式是一种在软件开发中常用的设计模式,通过在客户端和目标对象之间增加一层中间层,让代理对象代替目标对象进行访问,从而简化系统的复杂性。代理模式可以根据不同的使用目的分为远程代理、虚拟代理、Copy-on-Write代理、保护代理、防火墙代理、智能引用代理和Cache代理等几种。本文将详细介绍代理模式的原理和应用场景。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Mono为何能跨平台
    概念JIT编译(JITcompilation),运行时需要代码时,将Microsoft中间语言(MSIL)转换为机器码的编译。CLR(CommonLa ... [详细]
author-avatar
多米音乐_34176403
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有