如何在.NET Windows服务中调试非托管代码?

时间:2010-12-29 15:39:06

标签: .net debugging com windows-services interop

我一直在开发一个VB.Net Windows服务。它使用用C ++开发的COM类。

我无法将其用作真正的服务,因为我使用未注册的第三方控件显示唠叨屏幕,因此服务崩溃了。管理层昨天终于买了它,所以我刚刚开始在服务模式下测试它。

前段时间我曾经在应用程序开始时调用了DebugBreak()来调试c ++ windows服务。 对于.NET我发现了这个: How to debug a windows service using breakpoints?

到目前为止,这么好;但是在服务模式下运行时,COM对象上的方法调用失败,错误代码为0x80004003,但它可以作为应用程序正常工作。

问题是我无法调试COM代码。如果我在我的vs会话中加载一个cpp并放入一个断点,它会被忽略,因为即使在创建COM对象之后也没有加载符号。如果我在C ++代码中放入DebugBreak,它会在.Net中引发异常,但不要求我调试代码。在服务项目中,选中“启用非托管代码调试”。

我也试过使用COM类项目,但没有成功。

有什么想法吗?

编辑 - 2011-01-03:要回答Chris O的问题,是的,我可以将这个过程作为SYSTEM运行,但是,这对我有什么帮助?如果一切都像SYSTEM一样,那是因为我需要一些权限吗?

是的,我能够将调试器附加到进程,具有上述限制:在Visual Studio 2005的“附加到进程”对话框中,该服务不会出现在进程列表中,所以我有使用Debug.Assert调用或类似方法。另外,我只能调试.Net代码;我无法调试本机代码。

0 个答案:

没有答案