【问题标题】:How do we trouble shoot a long-running NETMF program that stops in production?我们如何解决在生产中停止的长期运行的 NETMF 程序?
【发布时间】:2014-04-08 19:39:30
【问题描述】:

情况

我有一个FEZ Cobra II NET 正在运行测试代码。它每秒向 LAN 上的服务器发送数据。服务器将数据写入文本文件。在 27 小时和 97,200 次成功发送后,Cobra 停止发送。显然,我不会在 27 小时内进行调试,而且我不知道如何排除故障,因为标准的软件故障排除方法不适用。

问题

  • 如果我要写入记录 Cobra 上的错误,我将如何访问它们?
  • NETMF 有应用程序日志吗?我们如何访问它们?
  • 有事件查看器吗?
  • 这里还有哪些其他可行的故障排除/调试步骤?

代码

public class Program
{
    private static Timer timer;
    private Network network;

    public static void Main()
    {
        Program p = new Program();
        p.network = new Network();
        p.RepeatedlySendDataToWcfService();
        Thread.Sleep(Timeout.Infinite);
    }

    private void RepeatedlySendDataToWcfService()
    {
        Program.timer = 
            new Timer(this.TimerCallback_SendSbcData, new object(), 0, 1000);            
    }

    private void TimerCallback_SendSbcData(object stateInfo)
    {
        SbcData data = new SbcData();
        this.network.Send(data);
    }
}

搜索和研究

【问题讨论】:

  • 能不能让它更频繁地发送,看看是否和包数有关?
  • @peter_mcc 这真是个好主意!现在你提到它似乎很明显。
  • “很明显,我不会在 27 小时内调试” - 为什么不运行带有调试器的设备,并定期检查它?至少您可以在应用程序失败时检查它的状态,例如发现具有意外值的变量。
  • 您链接到的一篇文章指出“部署 .NET Micro Framework 应用程序后,您可以使用与任何其他托管 C# 应用程序基本相同的技术在 Visual Studio 中对其进行调试。”我认为,最坏的情况是,您必须使用模拟器。
  • 我注意到在 NetMF 计时器示例中,它们将目标方法包装在“new TimerCallback()”中。它可能只是一个网络信号,围绕数据发送的 Try/Catch 应该处理。您可以将错误记录到存储卡中。

标签: c# network-programming embedded .net-micro-framework


【解决方案1】:

由于 Fez 有一个存储卡插槽,您可以在其中记录发送错误:

private void TimerCallback_SendSbcData(object stateInfo)
{
    try
    {
        SbcData data = new SbcData();
        this.network.Send(data);
    }
    catch (Exception ex)
    {
        MyLogToCardMethod(ex.ToString());
    }
}

安装卡的说明在制造商网站上:

https://www.ghielectronics.com/docs/51/netmf-file-system

【讨论】:

  • 我知道这是一个相当古老的线程,但是在调试时使用 Debug.Print 选项怎么样?我只是想添加这个,因为其他人来这个线程,它也可能有用。
猜你喜欢
  • 2018-02-28
  • 2020-04-09
  • 1970-01-01
  • 2021-04-09
  • 2016-03-29
  • 2016-01-16
  • 2011-02-08
  • 2011-11-21
  • 2018-05-29
相关资源
最近更新 更多