簡體   English   中英

如何從插件訪問Eclipse Java調試器?

[英]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();

這正是我想要的。 我想我需要手動讀取源代碼文件,通過將“換行符”字符作為分隔符來運行它們,並獲取相應的令牌以讀取該特定行。

有一個在可用的信息數量巨大IJavaThreadIJavaBreakpoint傳遞給參數breakpointHit的方法IJavaBreakpointListener它應該包含這些信息。

我認為對於具有行號(不是全部都是)的斷點, IJavaBreakpoint參數也實現ILineBreakpoint包含行信息的ILineBreakpoint

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM