java - 如何使用 Jackson 检查和打印 JDI Value 对象?
问题描述
我正在尝试以我从 Java 调试接口检索到的 JSON 格式的对象进行漂亮打印。这些对象是我的断点命中的方法的参数。
我在 BreakpointEvent 处理程序中的代码如下:
// event is the current BreakpointEvent
StackFrame sf = event.thread().frame(0);
for (Value v : sf.getArgumentValues()) {
try {
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(v));
} catch (Exception e) {
e.printStackTrace();
}
}
但是,我得到的唯一输出是一堆{"collected":false}
,这根本没有帮助......
我可以手动进行检查,首先检查每个实现的精确接口(接口v
,如ArrayReference
,StringReference
... .v.getValues()
ArrayReference
但是人工检查更容易出错,而且在代码和维护方面也更加繁重。我相信杰克逊可以在这里做到这一点,但我没有让它发挥作用......
解决方案
我最终做的方式如下:
我创建了一个包装类 MyValue,它有一个 public attributevalue
和一个 getter getValue()
,我自定义它以返回:
- 如果可能,使用 java 基类型;
- MyValue 对象的 ArrayList 或 HashMap,用于 ArrayReference 和 ObjectReference Value 对象。
我还必须处理无限引用(循环图,例如对象 A 具有对象 B 的引用,对象 B 具有对象 A 的引用),因此 MyValue 类还包含一个祖先列表,以避免循环。希望这对将来的某人有所帮助。
推荐阅读
- json - 如果包含在其中的字典列表具有特定键或列表为空,则返回字典列表中的每个元素
- gcc - 有没有办法创建具有正确偏移量的剥离二进制文件?
- mongodb - 从持久聊天中存储和检索聊天数据的最佳方式
- javascript - 在 next.js 中将 React 组件渲染为静态公共 HTML
- python - 给定行和列的协方差结构生成矩阵
- r - 如何将导入的数据应用和过滤到 FlaxDashBoard 应用程序中?
- flutter - 致命异常:FinalizerWatchdogDaemon Flutter
- javascript - 如何通过在 SVG 中定义半径来同时创建圆周?
- r - 当点击登录按钮时,shinyapp 中的登录页面不起作用
- javascript - React Native: Unabe to resolve module ./src/Home from.... / 这些文件都不存在: