我目前正在Linux上开发单声道服务应用程序。现在我想将单声道调试器附加到我正在运行的服务上。我怎样才能找到服务流程?如何将调试器附加到它?
问候
答案 0 :(得分:1)
Mikael Chudinov写的一篇优秀文章在此解释:http://blog.chudinov.net/demonisation-of-a-net-mono-application-on-linux/
从它作为基础开始,我已经创建了一个通用基类,它可以让你动态检查是否附加了调试器,让你调试代码或在未调试时正常启动单声道服务。
基类是:
using System;
using NLog;
using System.ServiceProcess;
public class DDXService : ServiceBase
{
protected static Logger logger = LogManager.GetCurrentClassLogger();
protected static void Start<T>(string[] args) where T : DDXService, new()
{
if (System.Diagnostics.Debugger.IsAttached)
{
logger.Debug("Running in DEBUG mode");
(new T()).OnStart(new string[1]);
ServiceBase.Run(new T());
}
else
{
logger.Debug("Running in RELEASE mode");
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] { new T() };
ServiceBase.Run(ServicesToRun);
} //if-else
}
}
要使用此基类,只需继承它并覆盖System.ServiceProcess.ServiceBase方法OnStart和OnStop。在此处放置您的Main方法以启动init序列:
class Service : DDXService
{
protected override void OnStart(string[] args)
{
//Execute your startup code
//You can place breakpoints and debug normally
}
protected override void OnStop()
{
//Execute your stop code
}
public static void Main(string[] args)
{
DDXService.Start<Service>(args);
}
}
希望这有帮助。