Java jdb中的文本导航在bash中不起作用

Java jdb中的文本导航在bash中不起作用,java,bash,debugging,arrow-keys,jdb,Java,Bash,Debugging,Arrow Keys,Jdb,在bash中运行jdb时,箭头键会产生奇怪的垃圾: up: ^[[A down: ^[[B left: ^[[D right: ^[[C 因此,我不能使用命令历史记录,也不能纠正拼写错误,因为我根本无法浏览文本,这非常烦人。有解决办法吗 Java版本信息: "1.6.0_24" OpenJDK Runtime Environment (Ice

在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)
GNU bash, version 4.2.28(1)-release (x86_64-redhat-linux-gnu)
Bash版本信息:

"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)
GNU bash, version 4.2.28(1)-release (x86_64-redhat-linux-gnu)
你试过用JDB运行吗

我可以使用JLine作为jdb(java调试器)的输入处理程序吗

对。尝试运行:

java jline.ConsoleRunner com.sun.tools.example.debug.tty.tty args


JLine为您提供光标交互和命令行历史记录。

根据Brian关于使用JLine的建议,这一点相当有效

我终于可以使用up/down浏览命令历史记录,但它有一些缺点,例如不支持ALT+DEL(删除最后一个单词)、CTRL+LEFT/RIGHT(将光标前后移动一个单词)和CTRL+R(反向搜索过去的命令)

然后我了解到这些设施是由提供的,所以我花了一些时间来尝试

这是一段非常痛苦的旅程,因为我目前正在使用OpenSUSE 12.3,我不会让您对所有细节感到厌烦,但我会概述这些细节,以防您真的对此感兴趣并发现自己不得不遵循类似的旅程:

  • JLine2仅提供源代码(至少在OS12.3上),因此不容易安装rpm
  • 它需要maven来构建(官方OpenSUSE 12.3存储库不提供这一功能,但谢天谢地,有人专门为它设计)
  • 由于我是在工作中构建它的,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+左/右操作期间干扰光标的移动,这是一个遗憾

现在,我通过键入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

好吧,希望这能帮助那些渴望更多的人。如果您需要更多关于我旅程的细节,请告诉我,我保留了相当详细的日志,但只是不想让读者负担太多的细节(除非事实证明您确实需要它。)

您尝试过
rlwrap
?您可以安装
rlwrap
并运行

rlwrap jdb MyMainClass <args>
rlwrap jdb MyMainClass
而不仅仅是

jdb MyMainClass <args>
jdbmymainclass

不适用于我,我收到错误:找不到主类:jline.ConsoleRunner。(我在Fedora16上使用JLine v0.9.94。)在将JLine.jar和tools.jar添加到我的类路径之后,我现在可以在调试JUnit测试用例时使用JLine,例如:java-classpath$classpath JLine.ConsoleRunner com.sun.tools.example.debug.tty.tty-classpath$classpath JUnit.textui.TestRunner testmyexample tty类是否更改了名称或移动到了其他名称空间?今天,在OpenJDK 7.u51_2.4.4-1和JDK 1.7.0_45上,我得到了
错误:当我运行简单的命令
java com.sun.tools.example.debug.tty
时,无法找到或加载主类com.sun.tools.example.debug.tty
。要回答我自己的问题,你需要确保JDK附带的“tools.jar”,在您的类路径上。该类未重命名,您可以在此处看到其源代码的副本: