Skip to content

Commit

Permalink
add ndbg docs
Browse files Browse the repository at this point in the history
  • Loading branch information
crclz committed Apr 21, 2020
1 parent a418607 commit c4cd6dc
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 3 deletions.
7 changes: 5 additions & 2 deletions README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@

**遇到问题的时候,请确保已仔细阅读本README**

## NDbg
[NDbg](./ndbg-readme.md)是jwdbg的升级版。解决了jwdbg的局限性。请优先考虑Ndbg。


## 贡献者
**感谢以下测试数据的贡献者:**
- crclz
Expand Down Expand Up @@ -139,7 +143,6 @@ yml文件 --> 提取输入数据、期望的输出行 --> 运行目标程序,
### 局限性
1. 在“对比期望的输出和实际的输出”过程中,程序无法获知哪一行输入产生了哪几行输出,所以在**极少部分情况下,不能准确的定位出问题的输出行**。这种情况下,如果你感到迷惑,就请用IDE来调试。
当然,如果后续的jw任务变得复杂,就会加入一些(对目标程序)侵入性的要求,例如要求目标程序输出一些分隔符,来突破这种局限性。
1. **(此局限性在ndbg被解决)** 在“对比期望的输出和实际的输出”过程中,程序无法获知哪一行输入产生了哪几行输出,所以在**极少部分情况下,不能准确的定位出问题的输出行**。这种情况下,如果你感到迷惑,就请用IDE来调试。
2. jw pdf所要求提供的功能对于测试来说不够用。例如,在jw05中,SUDO状态下是无法使用gc命令。当然这也是需要侵入性的改动,所以只有当矛盾特别尖锐时,才会去做这个修改。
3 changes: 2 additions & 1 deletion jw05-readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@ jw05的测试数据依旧有没有解决的问题(如果我忽略了什么,
使用之前,应当用jw04的数据进行测试,因为`jw05.yml`里面省略了某些细节,而这些细节包含在jw04的测试数据中。

## jw05-arg.yml
jw05少参数,错参数测试。[详细](#少参数、错参数)
jw05少参数,错参数测试。[解释](#少参数、错参数)

如果遇到困难,请尝试[ndbg](ndbg-readme.md)

---

Expand Down
33 changes: 33 additions & 0 deletions ndbg-readme.md
Original file line number Diff line number Diff line change
@@ -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`

0 comments on commit c4cd6dc

Please sign in to comment.