Debugger cannot display source for JDK/dependency classes (jdt:// frame URIs, sourceReference: 0)
まだ誰も着手していません。
評価
調査の方向性
The report traces the failure to the bundled Java debug adapter's StackTraceRequestHandler, JdtSourceLookUpProvider, and SourceRequestHandler; it does not identify those files in the repository. Start by locating the stack trace source construction and the existing source handle registration path. Check how jdt:// sources are represented in DAP frames, then verify that a source request can retrieve their content and that the frame receives a usable source reference.
索引モデルが issue の本文から書いたものです。
説明
Summary
Stepping into JDK or third-party library classes works (the frame shows up in the call stack), but no source can be displayed: the debug adapter reports every non-project frame's source as a jdt://contents/... URI with sourceReference: 0, which Zed cannot resolve. VS Code can render these URIs because the vscode-java extension registers a jdt:// content provider; Zed has no such provider and needs either an absolute file path or a non-zero DAP sourceReference to fetch source content.
Environment
| Zed | 1.27.0 (c84af5b99cbc366d675064e52b23664a015b6e35) |
| Java extension | 6.8.30 (jdt.ls 1.63.0, com.microsoft.java.debug.plugin-0.53.2.jar) |
| OS | Windows 11 (10.0.26300) x64 |
| JDK | Temurin 25.0.2+10 (%JAVA_HOME%\lib\src.zip present) |
| Project | minimal Maven project, maven.compiler.release=17, dependency commons-lang3:3.17.0 |
Repro
src/main/java/demo/Main.java:
package demo;
import org.apache.commons.lang3.StringUtils;
public class Main {
public static void main(String[] args) {
String pretty = StringUtils.capitalize("world"); // breakpoint here, then Step Into (F11)
System.out.println(pretty);
}
}
.zed/debug.json:
[
{
"label": "demo: debug main",
"adapter": "Java",
"request": "launch",
"mainClass": "demo.Main",
"cwd": "$ZED_WORKTREE_ROOT",
"stopOnEntry": true
}
]
Step Into on the StringUtils.capitalize line: the call stack correctly gains a StringUtils.capitalize frame, but the editor shows nothing, and Zed.log fills with:
ERROR [crates::debugger_ui/src/session/running/stack_frame_list.rs:829] no absolute source path in stack frame 6, source: Some(Source {
name: Some("StringUtils.java"),
path: Some("jdt://contents/commons-lang3-3.17.0.jar/org.apache.commons.lang3/StringUtils.class?=zed-java-debug-demo/C:%5C/Users%5C/...%5C/commons-lang3-3.17.0.jar=/...=%3Corg.apache.commons.lang3(StringUtils.class"),
source_reference: Some(0), ... })
Same behavior for JDK classes (java.lang.*, etc.): the frame appears, the source cannot be shown.
Root cause analysis
Inspecting com.microsoft.java.debug.plugin-0.53.2.jar (the bundled Microsoft java-debug server):
JdtSourceLookUpProvider#getSourceFileURI(sourcePath, sourceName)returns a real file URI only when the lookup result is anIResource(workspace source file). Every class resolved as anIClassFile— i.e. anything from a jar or the JRT runtime, whether or not a sources jar / src.zip is attached — is turned into ajdt://contents/...URI bygetFileURI(IClassFile).StackTraceRequestHandleremits that URI asTypes.Source.pathand leavessourceReferenceat0, so a DAP client has no way to fetch the content either. (ThedebugSupportOnDecompiledSource == ONbranch only remaps line numbers; it does not set asourceReference.)
So on any client other than VS Code (which resolves jdt:// via a content provider querying jdt.ls), library/JDK frames are source-less.
Things that do not fix it, for the record:
src.zippresent /java.maven.downloadSources: true— the frame URI staysjdt://even with sources attached; it only changes what content VS Code shows."sourcePaths": [...]in the launch config — the plugin's source lookup never consumes it (no directory source container is created from it).stepFilters— not the issue here; stepping does enter the code.
Suggested fix
The adapter already has everything needed to serve this content over DAP: SourceRequestHandler implements the source request via IDebugAdapterContext#getSourceUri(int) → ISourceLookUpProvider#getSourceContents(String), and JdtSourceLookUpProvider#getSourceContents already returns source/decompiled content for jdt:// URIs.
So for frames whose resolved source is a jdt:// URI, it should additionally register the URI in sourceHandles and set source.sourceReference to that handle (optionally only when the client doesn't advertise jdt:// support). Then Zed — and any other non-VS Code DAP client — could display (and set breakpoints in, given supportsBreakpointLocationsRequest/line mapping) JDK and dependency sources.
Happy to provide logs or test a patched build on Windows.
Benchmark
For comparison, IntelliJ and VS Code (Extension Pack for Java) both display real or decompiled source for these frames.
- 主要言語
- Rust
- スター
- 225
- フォーク
- 47
- 平均マージ
- 3時間
- マージ済み PR(30日)
- 5
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
zed-extensions/java のほかの issue
-
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
zed-extensions/java#325 · コメント 1 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
zed-extensions/java#133 · コメント 1 件 ·
-
難易度 3/5 1〜2日 初心者へのやさしさ 45/100
zed-extensions/java#324 · コメント 1 件 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 30/100
zed-extensions/java#272 · コメント 6 件 ·
-
language-server
難易度 4/5 3〜5日 初心者へのやさしさ 25/100
zed-extensions/java#246 · コメント 4 件 ·
zed-extensions/java の issue をすべて見る
似ている issue
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 73/100
メンテナーはふだん 1 日以内に返信
-
🐞 bug 🧩 bevy_gantz_egui
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
nannou-org/gantz#500 ·
メンテナーはふだん 1 日以内に返信
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
metasequoiaime/msime#10989 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
fritzprix/libr-agent#2612 ·
メンテナーはふだん 1 日以内に返信
-
find: -printf %h drops a doubled slash対応中かも @qodelicious が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
メンテナーはふだん 1 日以内に返信