eclipse - 调试时始终查看对象
eclipse - Always view object when debugging
我在 Set 中有一个对象通过引用更新了它的内容。有没有一种方法可以使用对象哈希 ID (MyObject@93efa2ed
) 或 Eclipse ID (id=356
) 始终在我的表达式视图中观察,即使它超出范围?
我正在使用 Eclipse Neon。
Add a toString() method in you MyObject class.
You can do it through Eclipse using:
right click(in MyObject) -> Source -> Generate toString().
Now you will be able to see the contents rather than hash id of MyObject.
我不太清楚你的问题,但我想你的意思是:
- 你有一个包含在集合 S 中的对象 O,该集合 S 包含更多对象
- O 在你的代码中更新了(即它的内部属性发生了变化),你想在单步执行代码时通过表达式视图关注这些变化
- 你也希望这发生在代码 lines/methods 中,它没有通往 O
的直截了当的路径
我不知道有什么方法(内部 eclipse 好东西)可以让你通过它的 eclipse 调试 ID 或对象哈希引用'O。
但它可以非常简单地完成:您只需要能够通过某种(冗长的)引用方式从调试器中选择的当前帧到达 O 即可完成此操作。
最简单的方法是添加一些额外的代码以将 O 设置为某种静态变量。
在 "Display" 视图的帮助下,您甚至可以在手动调试时分配静态变量,让您执行 java 代码,该代码在当前堆栈帧的上下文中运行。
步骤:
- create/add class MyWatcher 到你的代码库。
- 逐步执行您的代码以获取您对 O 的处理(例如,在示例代码中,在将 o 添加到集合时的第 5 个中断)
- 打开显示视图并添加此行
MyWatcher.watches.put("a", o)
(将 'o' 替换为在您的断点处引用 O 的表达式)
- 使用 Ctrl+U 或通过上下文菜单执行行
- 将此添加到您的 "expressions" 视图:
MyWatcher.watches.get("a")
- 现在 O 将始终保持可见状态,例如。在下面的示例中:即使您在
foo()
、b/c 中,地图仍保留 O 上的 ar ref。
public class MyCode {
public static void main(final String[] args) {
bar();
foo();
}
static void bar() {
final Set<Object> set = new HashSet<>();
for (int i = 0; i < 10; i++) {
final List<Integer> o = Arrays.asList(i);
set.add(o);
}
}
static void foo() {
System.out.println("bar");
}
}
public class MyWatcher {
public static final Map<String, Object> watches = new HashMap<>();
}
我在 Set 中有一个对象通过引用更新了它的内容。有没有一种方法可以使用对象哈希 ID (MyObject@93efa2ed
) 或 Eclipse ID (id=356
) 始终在我的表达式视图中观察,即使它超出范围?
我正在使用 Eclipse Neon。
Add a toString() method in you MyObject class. You can do it through Eclipse using: right click(in MyObject) -> Source -> Generate toString(). Now you will be able to see the contents rather than hash id of MyObject.
我不太清楚你的问题,但我想你的意思是:
- 你有一个包含在集合 S 中的对象 O,该集合 S 包含更多对象
- O 在你的代码中更新了(即它的内部属性发生了变化),你想在单步执行代码时通过表达式视图关注这些变化
- 你也希望这发生在代码 lines/methods 中,它没有通往 O 的直截了当的路径
我不知道有什么方法(内部 eclipse 好东西)可以让你通过它的 eclipse 调试 ID 或对象哈希引用'O。
但它可以非常简单地完成:您只需要能够通过某种(冗长的)引用方式从调试器中选择的当前帧到达 O 即可完成此操作。
最简单的方法是添加一些额外的代码以将 O 设置为某种静态变量。 在 "Display" 视图的帮助下,您甚至可以在手动调试时分配静态变量,让您执行 java 代码,该代码在当前堆栈帧的上下文中运行。
步骤:
- create/add class MyWatcher 到你的代码库。
- 逐步执行您的代码以获取您对 O 的处理(例如,在示例代码中,在将 o 添加到集合时的第 5 个中断)
- 打开显示视图并添加此行
MyWatcher.watches.put("a", o)
(将 'o' 替换为在您的断点处引用 O 的表达式) - 使用 Ctrl+U 或通过上下文菜单执行行
- 将此添加到您的 "expressions" 视图:
MyWatcher.watches.get("a")
- 现在 O 将始终保持可见状态,例如。在下面的示例中:即使您在
foo()
、b/c 中,地图仍保留 O 上的 ar ref。
public class MyCode {
public static void main(final String[] args) {
bar();
foo();
}
static void bar() {
final Set<Object> set = new HashSet<>();
for (int i = 0; i < 10; i++) {
final List<Integer> o = Arrays.asList(i);
set.add(o);
}
}
static void foo() {
System.out.println("bar");
}
}
public class MyWatcher {
public static final Map<String, Object> watches = new HashMap<>();
}