当我在bash中运行jdb时,箭头键会产生奇怪的垃圾:
up: ^[[A
down: ^[[B
left: ^[[D
right: ^[[C
所以我不能使用命令历史记录,也不能纠正拼写错误,因为我根本无法浏览文本,这很烦人。有解决办法吗?
Java版本信息:
"1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.5) (fedora-68.1.11.5.fc16-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
Bash版本信息:
GNU bash, version 4.2.28(1)-release (x86_64-redhat-linux-gnu)
您尝试过rlwrap
吗?您可以安装rlwrap
并运行
rlwrap jdb MyMainClass <args>
而不仅仅是
jdb MyMainClass <args>
您尝试过用JDB运行JLine吗?
我可以使用JLine作为jdb(java调试器)的输入处理程序吗?
是的。尝试运行:
java jline。ConsoleRunner com.sun.tools.example.debug.tty.tty参数
JLine为您提供光标交互和命令行历史记录。
根据Brian关于使用JLine的建议,这项工作相当不错。
我终于可以使用向上/向下浏览命令历史了,但它有一些缺点,比如不支持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"one_answers"bsh-2.0b4.jar")
- 在这之后,它终于建成了,但运行中出现了问题,但我通过这里提到的调整解决了这些问题
在这之后,它运行得相当不错,我得到了JLine1错过的大部分福利,但不幸的是,jdb的">"提示似乎干扰了CTRL+LEFT/RIGHT操作期间光标的移动,这是一种耻辱。
目前,我通过键入CTRL+p和CTRL+N来解决这个问题(这似乎可以清除">"提示并使一切正常工作)
SIDE-NOTE:我发现用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
好吧,希望这能帮助到任何渴望更多的人。如果你需要更多关于我旅程的细节,请告诉我,我保存了相当详细的日志,但只是不想给读者带来太多细节的负担(除非你真的需要它!:))