Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7434555
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 29, 20262026-05-29T09:51:30+00:00 2026-05-29T09:51:30+00:00

I am investigating a memory dump with WinDBG and I am wondering why the

  • 0

I am investigating a memory dump with WinDBG and I am wondering why the heap holds two System.Threading.ThreadAbortExceptions which are both empty.

For the other three found exceptions I understand why they are there and that they are created by default:

  1. System.ExecutionEngineException

  2. System.StackOverflowException

  3. System.OutOfMemoryException

WinDBG output

0:000> !dumpheap -type System.Threading.ThreadAbortException

Address       MT     Size
010210fc 79330ef8       72     
01021144 79330ef8       72     
total 2 objects

Statistics:
MT    Count    TotalSize Class Name
79330ef8        2          144 System.Threading.ThreadAbortException

Total 2 objects

0:000> !pe 010210fc

Exception object: 010210fc
Exception type: System.Threading.ThreadAbortException
Message: <none>
InnerException: <none>
StackTrace (generated):<none>
StackTraceString: <none>
HResult: 80131530

0:000> !pe 01021144

Exception object: 01021144
Exception type: System.Threading.ThreadAbortException
Message: <none>
InnerException: <none>
StackTrace (generated): <none>
StackTraceString: <none>
HResult: 80131530

So my questions would be:

  1. Are these two also created by default and – if so – why are there two?
  2. If not, why are they empty?

The memory dump is from a Windows Service.

Update with thread information from dump

0:000> !threads

ThreadCount: 14
UnstartedThread: 0
BackgroundThread: 8
PendingThread: 0
DeadThread: 4
Hosted Runtime: no
PreEmptive   GC Alloc           Lock

ID OSID ThreadOBJ    State     GC       Context       Domain   Count APT Exception
0    1 11d4 0015c538      a020 Enabled  00000000:00000000 00163aa0     0 MTA
2    2  71c 0016f6a0      b220 Enabled  00000000:00000000 00163aa0     0 MTA (Finalizer)
3    4 1914 0019ac48   180b220 Enabled  6a205b0c:6a207910 00163aa0     0 MTA (Threadpool Worker)
5    6 1bd4 001b1580   200b020 Enabled  00000000:00000000 00163aa0     0 MTA
6    7 16a4 001bd260   200b220 Enabled  6a1dc7b8:6a1dd910 00163aa0     0 MTA
7    8  870 001c4a58   200b220 Enabled  6a1da740:6a1db910 00163aa0     0 MTA
8    9 2204 001cf798      b220 Enabled  00000000:00000000 00163aa0     0 MTA
9    d  4d8 0021cb98    80a220 Enabled  00000000:00000000 00163aa0     0 MTA (Threadpool Completion Port)
10    e 1b70 002227c0   200b220 Enabled  6a27d820:6a27d910 00163aa0     0 MTA
11   89 2224 68a3fbd0   880b220 Enabled  00000000:00000000 00163aa0     0 MTA (Threadpool Completion Port)
XXXX   11    0 2336e658   8801820 Enabled  00000000:00000000 00163aa0     0 Ukn (Threadpool Completion Port)
XXXX   46    0 16d17270   8801820 Enabled  00000000:00000000 00163aa0     0 Ukn (Threadpool Completion Port)
XXXX   3a    0 16ca7a70   8801820 Enabled  00000000:00000000 00163aa0     0 Ukn (Threadpool Completion Port)
XXXX   3b    0 10e64250   8801820 Enabled  00000000:00000000 00163aa0     0 Ukn (Threadpool Completion Port)
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-29T09:51:31+00:00Added an answer on May 29, 2026 at 9:51 am

    They are pre-allocated by the CLR. I’ll let these snippets from the SSCLI20 version of the CLR tell the story:

    From clr/src/vm/clrex.cpp, CLRException::GetThrowable():

    // If creating a normal ThreadAbortException fails, due to OOM or StackOverflow,
    // use a pre-created one.
    // We do not won't to change a ThreadAbortException into OOM or StackOverflow, because
    // it will cause recursive call when escalation policy is on:
    // Creating ThreadAbortException fails, we throw OOM.  Escalation leads to ThreadAbort.
    // The cycle repeats.
    throwable = GetPreallocatedThreadAbortException();
    

    Same file, CLRException::GetPreallocatedRudeThreadAbortException() method:

    // When we are hosted, we pre-create this exception.
    // This function should be called only if the exception has been created.
    _ASSERTE(g_pPreallocatedRudeThreadAbortException);
    return ObjectFromHandle(g_pPreallocatedRudeThreadAbortException);
    

    “The cycle repeats” could use some explanation: OutOfMemoryException -> Thread.Abort() -> new ThreadAbortException() -> OutOfMemoryException -> Thread.Abort(). Etcetera.

    The same source file also has GetPreallocatedOutOfMemoryException(), GetPreallocatedStackOverflowException() and GetPreallocatedExecutionEngineException() for the exact same reasons.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I'm investigating a possible memory leak which is causing an Error creating window handle
I have to take memory dump of IIS process for investigating an issue via
I'm just investigating some memory leaks in my app, I'm using Xcode 4.0.2. I've
I'm investigating a memory leak and from what I see, the problem looks like
I am investigating what is taking up lots of memory in my app. Using
I'm currently investigating a windows crash dump and the Visual Studio debugger shows me
While investigating memory issues in our application, it turns out that if the application
Whilst investigating a memory leak I discovered that it was caused by calling NewRow()
I've just been investigating some Silverlight controls with ANTS Memory Profiler (brilliant!) and found
Given an aggregation of class instances which refer to each other in a complex,

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.