【问题标题】:Null Reference Exception [duplicate]空引用异常[重复]
【发布时间】:2011-03-10 23:03:02
【问题描述】:

Frustrated 整天都在看这个......我正在创建一个 Windows 服务......这个代码在常规控制台应用程序上运行良好,但在 Windows 服务上不起作用。我得到一个空引用异常:

Null reference in OnStart(): Object reference not set to an instance of an object. 
 at VNurseService.Server.RequestServer..ctor(Server s)
 at VNurseService.VNurseServer.OnStart(String[] args)

代码如下:

protected override void OnStart(string[] args)
    {

        eventLog1.WriteEntry("In OnStart");
       Start:
        try
        {
            server = new Server();

            Server.RequestServer reference = new Server.RequestServer(server);
            new Thread(reference.run).Start();
            //r1 = new Thread(reference.run); r1.Start();

            Server.ResponseServer reference2 = new Server.ResponseServer(server);
            new Thread(reference2.run).Start();
            //r2 = new Thread(reference.run); r2.Start();

            Server.reference3 = new Server.ConfirmationServer(server);

            server.guiServer = new Guicom();
            server.restartServer = new Restart();

            eventLog1.WriteEntry("Restart in server is " + server.RESTART.ToString());

            new Thread(server.guiServer.accept).Start();
            new Thread(server.restartServer.accept).Start();
            goto check;

        check:
            while (true)
            {
                eventLog1.WriteEntry("CheckRestart is " + server.checkRestart().ToString());
                if (server.checkRestart())
                {
                    reference.cleanup();
                    //r1.Abort();
                    reference2.cleanup();
                    //r2.Abort();
                    //server = null;
                    goto Start;
                }
            }
        }
        catch (NullReferenceException ex)
        {
            eventLog1.WriteEntry("Null reference in OnStart(): " + ex.Message+ " " + ex.InnerException + @"\n " + ex.StackTrace);
        }
    }

有些东西给了我一个空引用异常,我不知道它在哪里。

提前感谢您的帮助。

【问题讨论】:

  • 什么行,发布完整的异常
  • 如果您没有获得行号,请确保将 .pdb 文件放在服务 exe 旁边。
  • 我真的只是看到了一个 goto 吗?
  • 看起来它在 VNurseService.Server.RequestServer..ctor(Server s) 中,所以可能在它试图创建 RequestServer 对象时......
  • RequestServer 构造函数的代码会有所帮助,问题似乎就在那里。

标签: c# windows windows-services


【解决方案1】:

您可以在服务启动时在代码中添加强制断点...

protected override void OnStart(string[] args)     
{   
    System.Diagnostics.Debugger.Break();       

    eventLog1.WriteEntry("In OnStart"); 
    ...
}

.. 并将调试器附加到进程

【解决方案2】:
 eventLog1.WriteEntry("Null reference in OnStart(): " + ...);

我认为您是自己信息的受害者。 OnStart 中实际上并没有发生异常,即使您的消息说它确实发生了。它在 RequestServer 类中轰炸,您没有发布的代码。请注意调用堆栈如何为您提供正确的信息。列出的 .ctor() 是该类的构造函数,就是被炸毁的那个。

看看吧。并修复 WriteEntry() 参数,我建议使用“启动失败”之类的内容。

【讨论】:

  • 没有一个 class 构造函数被调用 cctor ?
  • @Aak - 是的,大脑暂时冻结。谢谢:)
【解决方案3】:

更好的是,启动一个调试器:

protected override void OnStart( string [] args )
{
    if ( args.Contains( "debug" ) ) System.Diagnostics.Debugger.Launch();
}

在services.msc中,您可以通过右键单击(停止的)服务“属性/常规/启动参数”来添加要在启动时传递的参数

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    相关资源
    最近更新 更多