按照布赖恩关于使用 JLine 的建议,这工作得相当好。
我终于可以使用 up/down 来浏览命令历史,但它有一些缺点,例如不支持 ALT+DEL(删除最后一个单词)、CTRL+LEFT/RIGHT(将光标向后/向前移动一个单词)和 CTRL+R(反向搜索过去的命令)。
然后我了解到JLine2正在提供这些设施,所以我花了一些时间来尝试一下。
这是一段相当痛苦的旅程,因为我目前正在使用 OpenSUSE 12.3,我不会对所有细节感到厌烦,但我会概述它们,以防你真的热衷于此并且发现自己不得不遵循类似的旅程:
- JLine2 仅提供源代码(至少在 OS12.3 上),因此没有简单的 rpm 安装
- 它需要 maven 来构建它(官方 OpenSUSE 12.3 存储库不提供,但幸运的是有人为它制作了一个非官方的 rpm )
- 由于我是在工作中构建的,因此 Maven 存在代理问题,因此我需要在“ /usr/share/maven2/conf/settings.xml ”文件中提供代理详细信息。
- 然后当我输入“ mvn install ”时,一些maven项目依赖项出现问题,我必须手动下载+安装(“maven-scm-api-1.5.jar”、“jansi-1.11.jar”和“bsh- 2.0b4.jar")
- 在此之后,它终于建成了,但运行时出现问题,但我通过此处提到的调整解决了这些问题
在此之后,它工作得相当好,我得到了我在 JLine1 上错过的大部分好处,但不幸的是,jdb 的“>”提示似乎在 CTRL+LEFT/RIGHT 操作期间干扰了光标的移动,即丢人现眼。
现在,我通过输入 CTRL+P 后跟 CTRL+N 来解决这个问题(这似乎清除了 ">" 提示并使一切正常工作)
旁注:我发现输入一个很长的命令来用 jline 运行 jdb 很痛苦,所以我发现通过 bash 脚本运行 jline2+jdb 更好,如下所示:
#!/bin/sh
#GI: This is a version of jdb that runs via jline, so that you can up/down through command history
# JLINE V1.0 METHOD
# =================
#/usr/local/jdk1.6.0_29/bin/java -classpath /usr/share/java/jline.jar:/usr/local/jdk1.6.0_29/lib/tools.jar jline.ConsoleRunner com.sun.tools.example.debug.tty.TTY $*
# JLINE V2.* METHOD
# =================
/usr/local/jdk1.6.0_29/bin/java -classpath /usr/share/java/jline.jar:/usr/local/jdk1.6.0_29/lib/tools.jar jline.console.internal.ConsoleRunner com.sun.tools.example.debug.tty.TTY $*
例如,您可以通过 jline+jdb 运行您的程序,并且更简单:
jjdb.sh -classpath './*':'../lib/*' myprogram.MyMainClass
好的,希望对任何渴望更多的人有所帮助。如果您需要有关我的任何旅程的更多详细信息,请告诉我,我保留了相当详细的日志,但只是不想让读者负担太多细节(除非事实证明您真的需要它!:))