Debug mono服务应用程序

时间:2016-07-21 16:49:11

标签: c# debugging mono

我目前正在Linux上开发单声道服务应用程序。现在我想将单声道调试器附加到我正在运行的服务上。我怎样才能找到服务流程?如何将调试器附加到它?

问候

1 个答案:

答案 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);
    }
}

希望这有帮助。