首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jdb中的文本导航在bash中不起作用

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

Stack Overflow用户
提问于 2012-12-14 19:27:07
回答 3查看 1.6K关注 0票数 8

当我在bash中运行jdb时,箭头键会产生奇怪的垃圾:

代码语言:javascript
运行
复制
up: ^[[A
down: ^[[B
left: ^[[D
right: ^[[C

所以我不能使用命令历史记录,也不能纠正拼写错误,因为我根本不能导航文本,这是非常恼人的。对此有解决方案吗?

Java版本信息:

代码语言:javascript
运行
复制
"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版本信息:

代码语言:javascript
运行
复制
GNU bash, version 4.2.28(1)-release (x86_64-redhat-linux-gnu)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-14 19:30:06

你有没有试过用JDB运行JLine

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

是。尝试运行:

java jline.ConsoleRunner com.sun.tools.example.debug.tty.TTY参数

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

票数 4
EN

Stack Overflow用户

发布于 2016-07-03 12:34:31

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

代码语言:javascript
运行
复制
rlwrap jdb MyMainClass <args>

而不是仅仅

代码语言:javascript
运行
复制
jdb MyMainClass <args>
票数 10
EN

Stack Overflow用户

发布于 2014-07-27 13:26:27

根据Brian提出的使用JLine的建议,这个方法运行得相当好。

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

然后我了解到JLine2正在提供这样的功能,所以我花了一些时间尝试一下。

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

  • JLine2只提供源码(至少在OS12.3上),所以没有简单的rpm安装
  • 它需要Maven来构建它( OpenSUSE 12.3官方存储库没有提供,但谢天谢地有人为它做了)
  • 由于我是通过工作构建它的,maven有代理问题,所以我需要在"/usr/share/maven2/conf/settings.xml“文件中提供我的代理详细信息。然后当我输入”<代码>e112mvn

<代码>E213>“时,有几个maven项目依赖项存在问题,我必须手动执行这些依赖项("maven-scm-api-1.5.jar“、"jansi-1.11.jar”和"bsh-2.0b4.jar")

  • After download+install ),它最终构建完成,但在运行时出现了问题,但我通过调整mentioned here

解决了这些问题

在此之后,它工作得相当不错,我得到了JLine1错过的大部分好处,但不幸的是,jdb的">“提示符似乎在CTRL+向左/向右操作期间干扰了光标的移动,这是一种遗憾。

现在,我先输入CTRL+P,然后输入CTRL+N来解决这个问题(这似乎可以清除">“提示符,并使一切正常运行)

附注:我发现输入一个大而长的命令来使用jline运行jdb是很痛苦的,所以我发现通过这样的bash脚本运行jline2+jdb更好:

代码语言:javascript
运行
复制
#!/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运行您的程序:

代码语言:javascript
运行
复制
jjdb.sh -classpath './*':'../lib/*' myprogram.MyMainClass

好的,希望这对任何想要更多的人有所帮助。如果你需要我旅程的更多细节,请告诉我,我有相当详细的日志,但只是不想给读者带来太多细节的负担(除非事实证明你真的需要它!)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13877802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档