我为特定环境编写了自定义远程调试器。但是,远程环境执行多个优化以移动或删除原始代码段,因此它无法接受所有断点。在调试器会话启动并连接到远程运行时之前,我们无法预测哪些断点无法设置。我想保留这些断点,因为它们在编辑器中设置,但是当调试器启动时,它必须以某种方式告诉用户某些断点无效。我认为这些断点应该看起来不同,但我还没有为此目的找到API方法。我试图设置IMarker属性,如IMarker.PROBLEM和IMarker.SEVERITY,但它没有帮助。这样做的最佳方式是什么?
答案 0 :(得分:0)
Eclipse Debugger指南中的这段代码片段可能正是您所寻找的:
public PDALineBreakpoint(IResource resource, int lineNumber) throws CoreException {
IMarker marker = resource.createMarker(
"org.eclipse.debug.examples.core.pda.lineBreakpoint.marker");
setMarker(marker);
setEnabled(true);
ensureMarker().setAttribute(IMarker.LINE_NUMBER, lineNumber);
ensureMarker().setAttribute(IBreakpoint.ID, IPDAConstants.ID_PDA_DEBUG_MODEL);
}
https://www.eclipse.org/articles/Article-Debugger/how-to.html
答案 1 :(得分:0)
我自己找到了解决方案,但它看起来像是一个肮脏的黑客。它仅适用于IJavaLineBreakpoint
,对于另一种语言,需要另一种解决方案,但是现在Java支持就足够了。 IJavaLineBreakpoint
使用isInstalled
方法指示断点是否已安装到某个JVM中。不幸的是,你没有直接的方法来修改这个标志。内部实现只暴露org.eclipse.jdt.debug.core.installCount
属性的值。因此,要设置断点的已安装属性,您应该执行以下操作:
breakpoint.getMarker().setAttribute("org.eclipse.jdt.debug.core.installCount", 1);
此外,您可以以相同的方式增加/减少此属性。但是,我不确定这种方法是否与JDT版本兼容。