![](/img/trans.png)
[英]How can I install my Eclipse plug-in from the Eclipse Marketplace?
[英]How can I access the Eclipse Java debugger from a plug-in?
我正在為Eclipse平台開發一個插件。 此插件將用於提供有關當前正在調試的Java源代碼行的信息。
在調試Java程序時,當您遇到斷點時,Eclipse會切換到標准的Debug透視圖。 在此透視圖中,除了標准的控制台輸出,堆棧跟蹤和各種其他視圖之外,您還可以看到當前正在調試的Java程序的源代碼。 在“源代碼視圖”中,您可以看到突出顯示的行,這是當前正在調試/評估的代碼行。 突出顯示的代碼行是我想要訪問的內容。
假設我知道調試器何時運行(我通過實現IJavaBreakpointListener
的DebugBreakpointListener類來IJavaBreakpointListener
),我需要向調試器“提問”。 我想,我需要的是,以某種方式直接向調試器詢問當前正在突出顯示/調試/評估的代碼行或所述代碼行的行號。
我正在靜態訪問JDIDebugModel以添加Java Breakpoint Listener:
JDIDebugModel.addJavaBreakpointListener(new DebugBreakpointListener);
我以為我可以使用JDIDebugPlugin
靜態引用訪問調試器,但我還沒找到我正在尋找的東西。
在本研究論文的第3部分,作者建議:
Eclipse Java調試器基於Java調試接口(JDI)的API構建,JDI是Java Development Toolkit的一部分。 此API允許添加監視JVM事件(如BreakpointEvent)的請求。 當事件發生時,調試器會收到通知,並且可以獲取發生此事件的線程。 對於此線程的堆棧跟蹤中的每個幀,可以獲得以下信息:
•在此幀中執行的源Java文件(如果源不可用,則為null)。
•方法和行號(如果可用)。
•此對象;如果方法是靜態的,則返回null。
當調試斷點時,Eclipse調試器會使用此信息。 它顯示“Debug”視圖中掛起的線程的堆棧跟蹤。 對於此跟蹤中的選定框架,Eclipse會在其源文件中突出顯示相應的行號,並在“變量”視圖中顯示此變量。
列出的這些內容正是我正在尋找的東西。
不幸的是,我找不到有關如何“插入”調試器的詳細文檔。
如果有人可以向我提供信息,指向我的信息或示例代碼,或者可能向我提供Eclipse JDI項目中某人的聯系信息,那將非常感激。
提前致謝。
------ 更新和答案: ------
在greg-449的答案的幫助下,我完成了我想要做的事情。 這是我做的:
我寫的一個斷點監聽器實現了接口方法breakpointHit
,如下所示:
@Override
public int breakpointHit(IJavaThread thread, IJavaBreakpoint breakpoint) {
System.out.println("Just hit a breakpoint!");
// Save pointers to the thread & breakpoint for future use.
return 0;
}
通過指向保存在我的一個對象中的線程和斷點對象的指針,我可以查詢它們以獲取有關幀堆棧狀態,線程以及我遇到的特定斷點的最新信息。 我可以通過調用以下命令獲取調試器當前正在調試的類的namea dn路徑:
IStackFrame topStackFrame = thread.getTopStackFrame();
int debuggedLineNumber = topStackFrame.getLineNumber();
String debuggedClassPath = topStackFrame.getLaunch().getSourceLocator().getSourceElement(thread.getTopStackFrame()).toString();
這正是我想要的。 我想我需要手動讀取源代碼文件,通過將“換行符”字符作為分隔符來運行它們,並獲取相應的令牌以讀取該特定行。
有一個在可用的信息數量巨大IJavaThread
和IJavaBreakpoint
傳遞給參數breakpointHit
的方法IJavaBreakpointListener
它應該包含這些信息。
我認為對於具有行號(不是全部都是)的斷點, IJavaBreakpoint
參數也實現ILineBreakpoint
包含行信息的ILineBreakpoint
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.