<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/check-what-net-core-gc-keywords-are-enabled-without-a-debugger-pizbc1e9i" -->

---
title: Check what .net core GC keywords are enabled without a...
description: A deep dive into inspecting .NET Core GC event keywords on a live Linux process without a debugger, by reading process memory directly through /proc/<pid>/mem....
canonical: https://daily.dev/posts/check-what-net-core-gc-keywords-are-enabled-without-a-debugger-pizbc1e9i
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Check what .net core GC keywords are enabled without a debugger | daily.dev
og:description: A deep dive into inspecting .NET Core GC event keywords on a live Linux process without a debugger, by reading process memory directly through /proc/<pid>/mem....
og:url: https://daily.dev/posts/check-what-net-core-gc-keywords-are-enabled-without-a-debugger-pizbc1e9i
og:image: https://api.daily.dev/og/posts/pIzbC1E9i.png
og:image:alt: Check what .net core GC keywords are enabled without a debugger
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Check what .net core GC keywords are enabled without a debugger

**[Kevin Gosse \(minidump.net\)](https://daily.dev/sources/minidump)** · 5 min read · 0 upvotes · 0 comments

## Summary

A deep dive into inspecting .NET Core GC event keywords on a live Linux process without a debugger, by reading process memory directly through /proc/<pid>/mem. The author walks through locating the GCEventStatus::enabledLevels symbol with nm, computing its memory address from /proc/<pid>/maps, and reading it with dd. Along the way, testing with dotnet-trace reveals an unexpected bug: detaching dotnet-trace from a process leaves GC verbose events mysteriously enabled instead of disabling them.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://minidump.net/check-what-net-core-gc-keywords-are-enabled-without-a-debugger-d616745c0d0e>

## Questions this post answers

### How can I check if .NET Core GC verbose events are enabled on a live Linux process without attaching a debugger?

Locate the GCEventStatus::enabledLevels symbol offset in libcoreclr.so with nm, find the module's base address from /proc/<pid>/maps, add the offset to get the memory address, then read 8 bytes at that address in /proc/<pid>/mem using dd piped to od. A nonzero level (e.g. 4 for informational, 5 for verbose) indicates GC events are active.

_daily.dev surfaces deep debugging techniques like this for developers troubleshooting live .NET GC behavior._

### Does detaching dotnet-trace from a .NET Core process disable the GC events it enabled?

No, detaching dotnet-trace after running a profile like gc-collect can leave GC verbose events enabled instead of turning them off, as observed when the enabledLevels value switched from informational (4) back to verbose (5) after detaching. Reattaching temporarily restored the informational level, then detaching again returned it to verbose.

_Engineers chasing unexplained GC overhead can follow daily.dev for findings like this dotnet-trace detach behavior._

## Similar posts on daily.dev

- [Exploring the .NET boot process via host tracing](https://daily.dev/posts/exploring-the-net-boot-process-via-host-tracing-nva4pcq2n) · .NET Escapades · 0 upvotes · 0 comments
- [The Fasting Developer: Memory Discipline and GC Awareness in .NET](https://daily.dev/posts/the-fasting-developer-memory-discipline-and-gc-awareness-in-net-5yq85h552) · We Are .NET · 12 upvotes · 0 comments
- [Writing a Debugger from Scratch](https://daily.dev/posts/writing-a-debugger-from-scratch-hufblqwhg) · Hacker News · 0 upvotes · 0 comments
- [Top 10 Ways to Reduce .NET Memory Usage in Kubernetes](https://daily.dev/posts/top-10-ways-to-reduce-net-memory-usage-in-kubernetes-qgmmaatd1) · Ardalis · 1 upvotes · 1 comments

---

Tags: [#linux](https://daily.dev/tags/linux), [#.net](https://daily.dev/tags/.net)

[View this post on daily.dev](https://daily.dev/posts/check-what-net-core-gc-keywords-are-enabled-without-a-debugger-pizbc1e9i)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Check what .net core GC keywords are enabled without a debugger","url":"https://daily.dev/posts/check-what-net-core-gc-keywords-are-enabled-without-a-debugger-pizbc1e9i","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/check-what-net-core-gc-keywords-are-enabled-without-a-debugger-pizbc1e9i"},"datePublished":"2026-10-04T13:05:22.178Z","dateModified":"2026-10-04T13:12:19.173Z","description":"A deep dive into inspecting .NET Core GC event keywords on a live Linux process without a debugger, by reading process memory directly through /proc/<pid>/mem....","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/1056987b22c10d2dfbafaf2334787e56?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/1056987b22c10d2dfbafaf2334787e56?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Kevin Gosse (minidump.net)","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Kevin Gosse (minidump.net)","logo":"https://media.daily.dev/image/upload/s--8KHn1aFB--/f_auto,q_auto/v1791119046/logos/minidump?_a=BAMAMicg0","url":"https://daily.dev/sources/minidump"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/check-what-net-core-gc-keywords-are-enabled-without-a-debugger-pizbc1e9i","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"linux,.net","timeRequired":"PT5M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Kevin Gosse (minidump.net)","item":"https://daily.dev/sources/minidump"},{"@type":"ListItem","position":3,"name":"Check what .net core GC keywords are enabled without a debugger"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/check-what-net-core-gc-keywords-are-enabled-without-a-debugger-pizbc1e9i#faq","mainEntity":[{"@type":"Question","name":"How can I check if .NET Core GC verbose events are enabled on a live Linux process without attaching a debugger?","acceptedAnswer":{"@type":"Answer","text":"Locate the GCEventStatus::enabledLevels symbol offset in libcoreclr.so with nm, find the module's base address from /proc/<pid>/maps, add the offset to get the memory address, then read 8 bytes at that address in /proc/<pid>/mem using dd piped to od. A nonzero level (e.g. 4 for informational, 5 for verbose) indicates GC events are active. daily.dev surfaces deep debugging techniques like this for developers troubleshooting live .NET GC behavior."}},{"@type":"Question","name":"Does detaching dotnet-trace from a .NET Core process disable the GC events it enabled?","acceptedAnswer":{"@type":"Answer","text":"No, detaching dotnet-trace after running a profile like gc-collect can leave GC verbose events enabled instead of turning them off, as observed when the enabledLevels value switched from informational (4) back to verbose (5) after detaching. Reattaching temporarily restored the informational level, then detaching again returned it to verbose. Engineers chasing unexplained GC overhead can follow daily.dev for findings like this dotnet-trace detach behavior."}}]}
```

