错误处理和调试
感谢网友 zxzxy1988 的翻译


错误处理和调试

leJOS NXJ 提供了错误处理和调试的若干功能,它们包括:

  • 异常(Exceptions)
  • 数据终止(Data Aborts)
  • 调试(Debugging)

下面有一部分提到的远程监视和跟踪功能,也可以用来调试。

异常(Exceptions)

leJOS 支持绝大多数的JAVA标准异常类别,同时用户也可以创建他们自己的异常类别。

例如:

下面这个异常测试的简单程序说明了对于一个没有考虑到的异常,将会发生什么情况——在这个例子中,是一个数组序列号超出范围(ArrayIndexOutOfBounds)的异常。


import lejos.nxt.*;

public class ExceptionTest {
  public static void main(String[] args) {
    SensorPort p = SensorPort.PORTS[5];
  }
}
			

数据终止(Data Aborts)

如果leJOS的固件崩溃,会发生数据终止的情况。屏幕显示了程序崩溃处PC指针的当前值,以及其他错误的详细信息。

屏幕显示将会如下所示:

DATA ABORT

PC 00140BAC

AASR 1831BF01

ASR 00020601

OPCODE ???

DEBUG1 00020010

DEBUG2 00000000

通常情况下,如果你执行一个并不是leJOS NXJ二进制格式的文件,或者是执行一个不完整的leJOS NXJ 文件,都会引起上述崩溃。

如果在其他情况下,你也遇到了该问题,那么你应该在leJOS NXJ论坛向leJOS团队报告这个错误。

回到顶部

远程调试(Remote Debugging)

你可以把你的电脑当做一个远程控制台,来显示你的NXJ程序的运行状态。lejos.nxt.comm.RConsole类就有这种功能。因为这个类没有实例,所有的方法都是静态的。

你可以用一下其中之一的方法来开始调试:

  • void open()

    开启了一个没有延迟的USB连接

  • void openUSB(int timeout)

  • void openBluetooth(int timeout)

NXT显示一个USB 控制台.. 或者 蓝牙控制台.

然后等待电脑的显示器连接上。

然后在你的电脑上执行nxjconsole 程序。当连接建立之后,NXT会显示 Got Connection, 几秒钟之后,NXT和PC控制台都打开了。

如果你使用了延时开启的变量,系统将等待特定秒数的时间。如果在此期间,调试监视器(debug monitor)仍然没有连接上,系统将在没有调试的状况下进行运行(proceeds without debugging.)。如果超时时间为0,那么系统将永久等待。

你也可以使用 ConsoleViewer 应用程序来显示这个超时时间。

调试的状态可以用以下方法来输出:

  • void println(String s)

  • void print(String s);

如果没有执行有效的打开语句,调试的输出会被丢弃。如果有有效的输出, 那么这些字符会在电脑上运行的窗口或者是 nxjconsole 运行的终端显示。

当调试结束后,你应该执行下面这个方法:

  • void close()

该方法会关闭USB或者蓝牙连接。

例如:


import lejos.nxt.*;
import lejos.nxt.comm.*;

/** * example using RConsole*/
public class TestRConsole {  
  public static void main(String[] args) {
    RConsole.open();
    RConsole.println("Start for loop ");
    for (int i = 0; i < 5; i++) {
      RConsole.print(" " + i);
      LCD.drawInt(i, 2, 2 * i, 4);
    }
    RConsole.println("\n done ");
    RConsole.close();
    Button.waitForPress();
  }
}
			

返回顶部