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



当我在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

好吧,希望这能帮助到任何渴望更多的人。如果你需要更多关于我旅程的细节,请告诉我,我保存了相当详细的日志,但只是不想给读者带来太多细节的负担(除非你真的需要它!:))

相关内容

  • 没有找到相关文章

最新更新