[API Proposal]: ```[StackTraceHidden(StackTraceVisibility.HideAllChildren)]```
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 35/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Stale
- Tech stack
- csharp
- Domain
- backend-api-design
Research direction
No implementation files or tests are named. Start by reviewing the existing StackTraceHidden attribute and the proposed StackTraceVisibility enum and constructor; done means the child-frame hiding behavior, full-detail retrieval, and public API are specified and validated.
Written by the indexing model from the issue text.
Description
Background and motivation
.NET stack traces are an important element that helps developers diagnose bugs and exceptions. However, diagnosing the actual location of the bug often involves developers skipping over unnecessary entries that should be hidden from the stack trace.
To alleviate this issue, the attribute [StackTraceHidden()] can be used to hide a single current method from the stack trace. This is often used for throw helpers but is an incomplete solution due to there being no ability to prune an entire branch of code.
Take the following program as an example:
DoTest();
static void DoTest() {
//This will always throw
using var FS = System.IO.File.OpenRead($@"\\0.0.0.0\C$\Testasdf.txt");
}
When this crashes, the stack trace will show:
[0] Unhandled exception. System.IO.FileNotFoundException: Could not find file '\\CODE2024\C$\Testasdf.txt'.
[1] File name: '\\CODE2024\C$\Testasdf.txt'
[2] at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options)
[3] at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
[4] at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
[5] at System.IO.Strategies.FileStreamHelpers.ChooseStrategyCore(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
[6] at System.IO.File.OpenRead(String path)
[7] at Program.<<Main>$>g__DoTest|0_0() in C:\Users\Administrator\source\repos\ConsoleApp16\ConsoleApp16\Program.cs:line 7
[8] at Program.<Main>$(String[] args) in C:\Users\Administrator\source\repos\ConsoleApp16\ConsoleApp16\Program.cs:line 3
The important part of the stack trace really begins at line 6 as lines 2-5 are essentially internal calls.
.NET should expose a way of easily hiding internal stack trace trees.
API Proposal
namespace System.Diagnostics;
public enum StackTraceVisibility {
Default,
Hidden,
HideAllChildren,
}
public partial class StackTraceHidden {
public StackTraceHidden(StackTraceVisibility Visibility) { }
}
API Usage
[StackTraceHidden(StackTraceVisibility.HideAllChildren)]
public void MyMethod() { }
Alternative Designs
Developers could catch and re-throw exceptions to try to clean up stack traces.
Risks
It is possible that someone might actually want all the internal details of exactly where an internal call failed. A method should exist that can retrieve them.
- Dominant language
- C#
- Stars
- 18.3k
- Forks
- 5.6k
- PR merge metrics
- PR metrics pending
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from dotnet/runtime
-
agentic-workflows untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
-
area-System.Reflection blocking-clean-ci-optional Known Build Error os-mac-os-x untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
-
area-CodeGen-coreclr untriaged
Difficulty 1/5 Under an hour Newbie friendliness 92/100
-
agentic-workflows untriaged
Difficulty 1/5 Under an hour Newbie friendliness 78/100
-
area-VM-meta-mono untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
-
:watch: Not Triaged 11.0 fundamentals/subsvc
Difficulty 2/5 1-3 hours Newbie friendliness 92/100
dotnet/AspNetCore.Docs#37699 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
SubtitleEdit/subtitleedit#15108 · 1 comment ·
-
area/docs-content Bug pulumi/docs
Difficulty 1/5 1-3 hours Newbie friendliness 94/100
-
Create parent directories only after the containment check in InstallHelper.TryExtractToDirectory Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
PowerShell/PSResourceGet#2056 ·