java - 关于嵌入 Java 脚本语言以进行调试/远程管理的建议

标签 java debugging scripting beanshell

我有一个相当复杂的服务器端应用程序,它经常要求我查看其内部发生了什么,以调试和修复问题。

因此,我嵌入了一个 Beanshell 实例,我可以通过 telnet 进入该实例(通常通过 ssh 隧道),但我想知道是否有更好的方法。

一些限制:

  • 没有 readline 支持,我可以通过在 telnet 上使用“rlwrap”来解决这个问题,但这并不理想
  • 变量和方法的制表符补全确实​​很好,但我还没有找到实现此目的的方法
  • 预定义变量(以访问我需要经常访问的内容)似乎不起作用,我必须预定义函数

总而言之,它相当笨重,尽管 Beanshell 有一个很好的优势,即它是 Java 的超集,因此没有人需要学习另一种编程语言来使用它。

我想知道其他人是否有通过脚本语言(Beanshell 或其他语言)促进远程调试/管理的经验,也许有人找到了更好的方法。

最佳答案

我们的一个应用程序有一个 BeanShell 接口(interface),它通过 RMI+SSL 通过 JMX 连接到我们的应用程序。

您确实可以通过调用 Interpreter#set() 来预定义变量在实际调用解释器之前。

除此之外,我同意您关于“阅读线”之类的功能的看法。有一个项目叫java-readline (BSH 显然附带了一个插件),旨在提供功能,但我还没有研究过如何使用它。它还需要 JNI 库。

我听说人们使用 Scala 和 Groovy 来实现命令行客户端,但到目前为止,我认为用于嵌入解释器的 Scala API 尚未标准化。我也不相信他们支持您正在寻找的“readline”功能。

关于java - 关于嵌入 Java 脚本语言以进行调试/远程管理的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1572985/

相关文章:

java - 具有 spark 序列化问题的功能接口(interface)

iphone - 仪器如何自动停止工作?

linux - 如何使用 DDD 对本地 Qemu 虚拟机进行内核调试?

c++ - 如何与调试器交谈,或更改异常消息?

linux - Bash 脚本未检测到失败的退出代码

command-line - 头的反面是什么?我想要文件中除前 N 行之外的所有行

linux - bash ping ip 回复时运行命令

java - 将日期插入oracle数据库

java - 为什么不用 java.util.List 检查 java.lang.reflect.Field 的实例

Java ArrayList Contain 总是返回 false,尽管它包含相同的值