You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jdb的print命令创建对象返回null?能否实例化对象?

JDB中new对象返回null的原因及解决办法

原因

  • JDB的print命令执行对象实例化时,要求目标线程必须处于挂起状态。你示例里的提示Thread not suspended就是核心问题——线程没挂起时,JDB不会实际执行对象构造逻辑,只会解析表达式结构,所以返回null。
  • OpenJDK 8的JDB实现对未挂起线程的表达式求值做了限制,像创建对象这种会修改程序状态的操作会被直接跳过,最终返回null。

解决办法

要在JDB里实例化新对象,必须先挂起线程,具体步骤如下:

  1. 挂起目标线程(或所有线程):执行suspend Thread-0(指定单个线程)或直接suspend(挂起所有线程)
  2. 再执行print或eval命令完成对象创建

正确操作示例

Thread-0[1] suspend Thread-0
Thread-0 suspended
Thread-0[1] print new java.lang.String("12")
 new java.lang.String("12") = "12"

另外,用eval命令也能达到同样效果,语法和print类似,更侧重表达式的执行逻辑。

内容的提问来源于stack exchange,提问作者Computer says 'no'--SOooooo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 20:32:03