【问题标题】:VS Debug DLL invoked from system service从系统服务调用的 VS Debug DLL
【发布时间】:2012-06-27 20:41:39
【问题描述】:

我正在为应用程序开发一个带有一些插件逻辑的 DLL(在 Visual C# Express 中)。

有没有办法调试这个DLL,一旦它被应用程序使用?该应用程序在 Windows 上作为服务运行,它是一个 COTS 应用程序,这意味着它不是我可以开始调试的 C# 项目。

我知道在 Visual C# Express 中进行调试存在一些限制。在 Visual Studio Pro 中是否可以执行此任务?

我想要实现的是能够单步执行逻辑,设置断点以查看调用来电时会发生什么。有什么线索吗?

【问题讨论】:

    标签: c# .net dll visual-studio-debugging


    【解决方案1】:

    我不确定 VS Express,但通常情况下,

    1. 打开 Visual Studio
    2. 打开您的解决方案(Windows 服务项目)
    3. 调试 -> 附加到进程
    4. 从可用进程列表中选择您的服务
    5. 您可以使用断点和其他东西。

    希望对你有帮助。

    【讨论】:

    • 啊哈!似乎是专业功能。但这会做。谢谢
    • .. 并经过测试。像魅力一样工作!
    【解决方案2】:

    虽然我不完全确定这具体如何与服务一起使用,但您可以设置任意调试目标。

    在调试面板中(在项目属性中),您可以将任何可执行文件或其他命令设置为调试目标。此命令生成的进程将附加调试器,无论可执行文件来自何处。不要求目标是 C# 项目或任何 Visual Studio 项目。这应该在 Express 和 Pro 中都可用。可以附加到稍后的进程(如果您有启动器),但这可能超出了您当前的范围。

    然后您像往常一样在代码中设置断点,当代码被命中时(无论您的代码调用它还是主机可执行文件),都会触发断点。根据您掌握的有关主机的信息量,您也可以有效地对其进行调试;即使您没有任何信息,您也可以逐步完成程序集。

    这里唯一的要求是目标加载并运行您的代码。根据上下文(程序的插件、注入的依赖项等),这具有不同的难度。该技术用于许多地方,特别是插件系统,您可能无法调试实际主机,但仍希望使用您的插件进行调试。

    另一个稍微丑陋一点的变种,是强迫宿主打破自我认同。这仅对调试有用,因为它非常具有破坏性。典型的方法是显示带有进程 ID 的消息框(模式)。然后该过程将暂停,直到消息被解除,并且可以附加调试器。这对于服务来说变得更加困难,尽管仍有一些方法可以以阻止的方式发布您的信息。

    【讨论】:

      【解决方案3】:

      您可以使用System.Diagnostics.Debugger.Break() 方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-11
        • 1970-01-01
        • 1970-01-01
        • 2022-01-21
        • 1970-01-01
        • 2015-11-10
        • 2013-01-10
        相关资源
        最近更新 更多