从系统服务调用VS Debug DLL

时间:2012-06-27 20:41:39

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

我正在开发一个DLL(在Visual C#Express中),其中包含一些应用程序的插件逻辑。

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

我知道在Visual C#Express中有关于调试的限制。在Visual Studio Pro中可以执行此任务吗?

我想要实现的是能够逐步完成逻辑,设置断点以查看呼叫到来时发生的事情。有线索吗?

3 个答案:

答案 0 :(得分:2)

我不确定VS Express,但通常是

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

答案 1 :(得分:1)

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

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

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

此处唯一的要求是目标加载并运行您的代码。根据上下文(程序插件,注入依赖项,诸如此类),这具有不同的难度。这种技术在很多地方使用,特别是你可能无法调试实际主机的插件系统,但仍然希望使用你的插件。

另一个稍微丑陋的变化是迫使主人破坏和自我识别。这仅适用于调试,因为它非常具有破坏性。典型的方法是显示带有进程ID的消息框(模态)。然后该进程将暂停,直到消息被解除,并且可以附加调试器。尽管仍然存在以阻塞方式发布信息的方法,但服务变得更加困难。

答案 2 :(得分:1)

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

相关问题