Attaching to a process that has the .NET debugger disabled fails with "Unknown Error: 0x80131c08" and does not name the cause
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 55/100
- issue の種類
- バグ
- 明瞭さ
- おおむね明確
- 活発さ
- 活発
- 技術スタック
- csharp, typescript, vscode
調査の方向性
Start at the coreclr attach path and reproduce the failure with DOTNET_EnableDiagnostics_Debugger=0, using the documented attach configuration and the reported CORDBG_E_TIMEOUT result. Trace how the attach failure is surfaced and, on Linux or macOS, how the debugger transport is detected. Done means the error identifies disabled debugger connections and the likely EnableDiagnostics or temporary-directory causes instead of reporting an unknown error.
索引モデルが issue の本文から書いたものです。
説明
Summary
If the target process was started with DOTNET_EnableDiagnostics_Debugger=0 (or DOTNET_EnableDiagnostics=0), attaching from VS Code fails with:
Unable to start debugging. Failed to attach to process: Unknown Error: 0x80131c08
0x80131c08 is CORDBG_E_TIMEOUT ("A wait timed out, likely an indication of deadlock"). The message does not say that the target has its debugger switched off, and "deadlock" points the reader elsewhere. The switch is a documented hardening setting. A developer who meets this error on a process configured by someone else has no route from the message to the cause.
Environment
- VS Code 1.140.0, C# extension 2.160.4 (vsdbg as bundled with that extension), Linux x64 (Ubuntu 26.04.1)
- Target runtimes: official .NET 10.0.12 and 8.0.31, linux-x64
Steps to reproduce
-
Create an app that stays alive long enough to attach to:
Console.WriteLine($"pid {Environment.ProcessId}"); Thread.Sleep(TimeSpan.FromMinutes(2)); -
Start it with the runtime's debugger disabled:
DOTNET_EnableDiagnostics_Debugger=0 dotnet run -
In VS Code, start a
coreclrattach configuration ("request": "attach","processId": "${command:pickProcess}") and pick the process.
Expected behavior
A message that names the likely cause. For example: "The target process is not accepting debugger connections. It may have been started with DOTNET_EnableDiagnostics=0 or DOTNET_EnableDiagnostics_Debugger=0, or it may use a different temporary directory from the debugger (TMPDIR, systemd PrivateTmp)." Failing that, at least the symbolic name CORDBG_E_TIMEOUT.
Actual behavior
Unable to start debugging. Failed to attach to process: Unknown Error: 0x80131c08. The target keeps running, unaffected.
What I measured
-
vsdbg (this extension): the message above, about 10 s after F5, attaching to a plain console app with no other tooling loaded, started with
DOTNET_EnableDiagnostics_Debugger=0on .NET 10.0.12. The same app started without the switch attached normally. The same message also appeared on .NET 8.0.31, in a setup where a profiling tool was also loaded in the target. -
The runtime side. A checked runtime build logs
Debugging disabled via EnableDiagnostics_Debugger config.once at start-up, and the debugger transport is never created. On Linux the transport's FIFOs are missing from$TMPDIRwhile the diagnostics IPC socket is still there:no switch: clr-debug-pipe-<pid>-<key>-in, clr-debug-pipe-<pid>-<key>-out, dotnet-diagnostic-<pid>-<key>-socket switch set: dotnet-diagnostic-<pid>-<key>-socket only -
Another debugger, for comparison. netcoredbg 3.2.0, attaching to the same kind of app with no other tooling loaded, fails
configurationDonewith0x80131c08after 10.0 s (3/3). The control without the switch attaches in under 0.1 s (3/3). So the HRESULT comes from the runtime's debugging services, not from vsdbg.
Suggestion
- Decode the HRESULT to its symbolic name rather than "Unknown Error".
- On Linux and macOS, when an attach to a .NET process times out, check whether the target's debugger transport exists (
clr-debug-pipe-<pid>-*in the temp directory). If it is missing while the process is clearly a .NET process (itsdotnet-diagnostic-<pid>-*socket exists, orlibcoreclris mapped), say that the target is not accepting debugger connections and name the two likely causes: theEnableDiagnosticsswitches, and a temp-directory mismatch (#3277). - Optionally, make that check before the attach and fail fast rather than after the timeout.
Related: #3277 (same error, temp-directory cause; a better error was suggested there) and #6883 (the same switch on the launch route, which failed silently).
- 主要言語
- TypeScript
- スター
- 3.1k
- フォーク
- 742
- 平均マージ
- 1日 3時間
- マージ済み PR(30日)
- 53
環境構築
このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
dotnet/vscode-csharp のほかの issue
-
Remove temporary .NET 11 CI container digest pin再び着手できるかも このイシューのプルリクエストはマージされずにクローズされました。 オープンInfrastructure Test
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
dotnet/vscode-csharp#9791 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
untriaged
難易度 4/5 3〜5日 初心者へのやさしさ 42/100
dotnet/vscode-csharp#9944 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
untriaged
難易度 4/5 3〜5日 初心者へのやさしさ 30/100
dotnet/vscode-csharp#9940 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
Bug C#DK
難易度 3/5 1〜2日 初心者へのやさしさ 35/100
dotnet/vscode-csharp#9910 ·
メンテナーはふだん 1 日以内に返信
-
aオープンC#DK untriaged
難易度 3/5 1〜2日 初心者へのやさしさ 25/100
dotnet/vscode-csharp#9901 ·
メンテナーはふだん 1 日以内に返信
dotnet/vscode-csharp の issue をすべて見る
似ている issue
-
area:cards enhancement ready-for-agent
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
fil-donadoni/tolaria#8883 ·
メンテナーはふだん 1 日以内に返信
-
xsd:integer cast from a string rejects negative numbers, a leading + and surrounding whitespaceオープンbug 🐛
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
comunica/comunica#1960 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
Waiting for: Product Owner
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
getsentry/sentry-javascript#26203 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
bytedance/flowgram.ai#1235 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
devswha/herdr-web-ui#3325 ·