Skip to content

docs: three gotchas that cost real time reading a CI core dump - #776

Merged
rbuergi merged 1 commit into
mainfrom
docs/core-dump-gotchas
Aug 4, 2026
Merged

rbuergi merged 1 commit into
mainfrom
docs/core-dump-gotchas

Conversation

@rbuergi

@rbuergi rbuergi commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Complements DebuggingNativeCrashes.md — which landed earlier today and already covers the macOS refusal and the Colima $HOME mount — with the three things still missing, each of which cost real time during the 2026-08-03 FutuRe.Test SIGSEGV investigation.

1. dotnet tool install -g dotnet-dump fails under emulation

It dies with There was an error reflecting type '…DotNetCliTool', and the resulting dotnet-dump: command not found reads like a PATH problem rather than what it is. The doc's curl single-file download is correct — this says why, so nobody "fixes" it back to the tool installer.

2. strings triage before any container

Two questions answered in seconds with no DAC and no emulation:

  • AccessViolation + FailFast ⇒ a runtime memory fault, not an uncaught managed exception
  • the loaded libcoreclr.so path ⇒ which runtime patch CI actually ran

On 2026-08-03 that was 10.0.10 on CI against 10.0.9 locally — on its own a candidate explanation for "only fails on CI", and worth eliminating before blaming load or shard composition.

3. A repeated frame is re-entrancy, and re-entrancy is the finding

Scanning the stack for repeats first would have short-circuited the whole investigation. Three theories — teardown, ALC unload, a scope registry — were each argued from circumstantial evidence and each wrong, before the dump showed:

CreateHub → Build → … → CreateHub → Build → Autofac ComponentRegistryBuilder.Build

Hub construction re-entering hub construction, nesting an Autofac container build inside the in-progress one. Fixed in #774.

Verification

DocumentationLinkIntegrityTest passes.

Release note

Skipped — internal documentation.

🤖 Generated with Claude Code

Complements DebuggingNativeCrashes.md (which already covers the macOS refusal
and the Colima $HOME mount) with what is still missing:

1. Use the curl single-file dotnet-dump, NOT `dotnet tool install -g` - the
   installer fails under qemu emulation with "error reflecting type
   '…DotNetCliTool'", and the resulting "command not found" reads like a PATH
   problem rather than what it is.

2. A `strings` pass answers two questions with no container and no DAC:
   AccessViolation+FailFast classifies it as a runtime memory fault rather than
   an uncaught managed exception, and the loaded libcoreclr path reveals which
   runtime patch CI actually ran. On 2026-08-03 that was 10.0.10 against 10.0.9
   locally - a candidate explanation for "only fails on CI" that is worth
   eliminating before blaming load or shard composition.

3. A frame appearing TWICE in one stack is re-entrancy, and re-entrancy IS the
   finding. Scanning for repeats first would have short-circuited the 2026-08-03
   investigation, where three theories (teardown, ALC unload, scope registry)
   were each argued from circumstantial evidence and each wrong before the dump
   showed CreateHub → Build → … → CreateHub → Build nesting an Autofac
   ComponentRegistryBuilder.Build inside the in-progress one (fixed in #774).

Verified: DocumentationLinkIntegrityTest passes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings August 4, 2026 08:39

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the native-crash debugging documentation to capture additional real-world CI minidump/core-dump triage lessons from the 2026-08-03 SIGSEGV investigation, complementing the earlier container/emulation guidance.

Changes:

  • Documents why dotnet tool install -g dotnet-dump can fail under qemu emulation and reinforces using the single-file curl download.
  • Adds “free triage” steps using strings to quickly identify FailFast/AccessViolation markers and the exact runtime patch version embedded in the dump.
  • Adds a heuristic for spotting re-entrancy via repeated frames in a stack, with an example tied to the #774 root cause.
Suppressed comments (1)

src/MeshWeaver.Documentation/Data/Architecture/DebuggingNativeCrashes.md:79

  • The example commands use dump.dmp, but earlier in the doc the dump is referenced as /dumps/<name>.dmp. Using the same placeholder here makes it clearer that the filename should match the artifact's actual .dmp name.
strings -a dump.dmp | grep -oE "AccessViolation|FailFast|SIGSEGV" | sort | uniq -c
strings -a dump.dmp | grep -oE "/usr/share/dotnet/shared/Microsoft.NETCore.App/[0-9.]+/lib[a-z]+\.so" | sort -u

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.


## Free triage before you start a container

`strings` on the raw core answers two questions in seconds, with no DAC and no emulation:
@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 4)

2 137 tests  ±0   1 949 ✅ ±0   4m 42s ⏱️ -8s
   12 suites ±0     188 💤 ±0 
   12 files   ±0       0 ❌ ±0 

Results for commit 4e9267b. ± Comparison against base commit e1bb245.

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 0)

966 tests  ±0   960 ✅ ±0   4m 20s ⏱️ +7s
  5 suites ±0     6 💤 ±0 
  5 files   ±0     0 ❌ ±0 

Results for commit 4e9267b. ± Comparison against base commit e1bb245.

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 1)

1 226 tests  ±0   1 225 ✅ +1   7m 31s ⏱️ -25s
   10 suites ±0       1 💤 ±0 
   10 files   ±0       0 ❌  - 1 

Results for commit 4e9267b. ± Comparison against base commit e1bb245.

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 2)

1 066 tests  ±0   963 ✅ ±0   4m 32s ⏱️ +12s
   10 suites ±0   103 💤 ±0 
   10 files   ±0     0 ❌ ±0 

Results for commit 4e9267b. ± Comparison against base commit e1bb245.

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 5)

1 202 tests  ±0   1 201 ✅ +1   5m 52s ⏱️ +24s
   12 suites ±0       1 💤 ±0 
   12 files   ±0       0 ❌  - 1 

Results for commit 4e9267b. ± Comparison against base commit e1bb245.

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Test Results (shard 3)

   12 files  ±0     12 suites  ±0   3m 30s ⏱️ -19s
1 017 tests ±0  1 013 ✅ ±0  4 💤 ±0  0 ❌ ±0 
1 087 runs  ±0  1 083 ✅ ±0  4 💤 ±0  0 ❌ ±0 

Results for commit 4e9267b. ± Comparison against base commit e1bb245.

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Test Results

   61 files  ±0     61 suites  ±0   30m 29s ⏱️ -8s
7 614 tests ±0  7 311 ✅ +2  303 💤 ±0  0 ❌  - 2 
7 684 runs  ±0  7 381 ✅ +2  303 💤 ±0  0 ❌  - 2 

Results for commit 4e9267b. ± Comparison against base commit e1bb245.

@rbuergi
rbuergi merged commit 084df65 into main Aug 4, 2026
16 checks passed
@rbuergi
rbuergi deleted the docs/core-dump-gotchas branch August 4, 2026 13:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants