From c4cd6dc9b4cb08ad2966f7e46194b11ef9aba84f Mon Sep 17 00:00:00 2001 From: crclz Date: Tue, 21 Apr 2020 12:47:59 +0800 Subject: [PATCH] add ndbg docs --- README.MD | 7 +++++-- jw05-readme.md | 3 ++- ndbg-readme.md | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 ndbg-readme.md diff --git a/README.MD b/README.MD index d662085..02e3687 100644 --- a/README.MD +++ b/README.MD @@ -10,6 +10,10 @@ **遇到问题的时候,请确保已仔细阅读本README** +## NDbg +[NDbg](./ndbg-readme.md)是jwdbg的升级版。解决了jwdbg的局限性。请优先考虑Ndbg。 + + ## 贡献者 **感谢以下测试数据的贡献者:** - crclz @@ -139,7 +143,6 @@ yml文件 --> 提取输入数据、期望的输出行 --> 运行目标程序, ### 局限性 -1. 在“对比期望的输出和实际的输出”过程中,程序无法获知哪一行输入产生了哪几行输出,所以在**极少部分情况下,不能准确的定位出问题的输出行**。这种情况下,如果你感到迷惑,就请用IDE来调试。 -当然,如果后续的jw任务变得复杂,就会加入一些(对目标程序)侵入性的要求,例如要求目标程序输出一些分隔符,来突破这种局限性。 +1. **(此局限性在ndbg被解决)** 在“对比期望的输出和实际的输出”过程中,程序无法获知哪一行输入产生了哪几行输出,所以在**极少部分情况下,不能准确的定位出问题的输出行**。这种情况下,如果你感到迷惑,就请用IDE来调试。 2. jw pdf所要求提供的功能对于测试来说不够用。例如,在jw05中,SUDO状态下是无法使用gc命令。当然这也是需要侵入性的改动,所以只有当矛盾特别尖锐时,才会去做这个修改。 \ No newline at end of file diff --git a/jw05-readme.md b/jw05-readme.md index 9b4988f..f334b5f 100644 --- a/jw05-readme.md +++ b/jw05-readme.md @@ -16,8 +16,9 @@ jw05的测试数据依旧有没有解决的问题(如果我忽略了什么, 使用之前,应当用jw04的数据进行测试,因为`jw05.yml`里面省略了某些细节,而这些细节包含在jw04的测试数据中。 ## jw05-arg.yml -jw05少参数,错参数测试。[详细](#少参数、错参数) +jw05少参数,错参数测试。[解释](#少参数、错参数) +如果遇到困难,请尝试[ndbg](ndbg-readme.md)。 --- diff --git a/ndbg-readme.md b/ndbg-readme.md new file mode 100644 index 0000000..e775de0 --- /dev/null +++ b/ndbg-readme.md @@ -0,0 +1,33 @@ +# NDbg + +## 特点 +`jwdbg.py`在有一部分情况下,无法准确定位出错的行。 + +`ndbg.py`解决了这个问题。顺便美化了输出内容。 + +## 前提条件:修改你的java程序 +ndbg要求待测目标程序在读取输入行的时候,输出`[Echo]+这个行`。 + +例如,假如程序读入`SUDO`,那么就应该紧接着输出一行`[Echo]SUDO`。这种输出是ndbg定位出错命令的依据。 + +具体做法就是,每一次调用`scanner.nextLine()`时,输出`[Echo].....`。推荐将`nextLine`用另一个方法包装,然后将每个`nextLine()`都换成另一个方法。 + +## 防止出错 +刚刚,你修改了java程序,让java程序多输出了东西。你可能在提交的时候忘记恢复这种行为。 + +所以,应该采用一个动态的**标志**来控制这种行为,只有检测到这个标志时,你的java程序才应该表现相应的额外行为。 + +`ndbg.py`提供了便捷途径。它会将环境变量中的`JWDBG`设为`debugging`,作为标志。这个环境变量是临时的,只对当前shell和从shell启动的程序有效。详情请复习系统编程linux的基础知识。 + +**简单来说,用ndbg进行测试时,在你的java程序的眼里,以下等式成立**: +```java +"debugging".equals(System.getenv("JWDBG")) +``` + +所以,修改你的java程序,让只有当这个表达式为`true`时,才输出`[Echo]...`。 + +## 二次检查 +最后,别忘了使用`jwdbg.py`来进行测试,以防程序有额外的行为。 + +## 运行方法 +运行方法和`jwdbg`一致,只不过将`jwdbg.py`换成了`ndbg.py`。 \ No newline at end of file