Yun Jin's WebLog

CLR internals, Rotor code explanation, CLR debugging tips, trivial debugging notes, .NET programming pitfalls, and blah, blah, blah...

Browse by Tags

Tagged Content List
  • Blog Post: Thread, System.Threading.Thread, and !Threads (III)

    I got email asking me to explain !Threads output in details. I think this is a good question and a good topic for another installment to the series. Here is an example I'll use for this post: 0:055> !threads ThreadCount: 202 UnstartedThread: 95 BackgroundThread: 1 PendingThread: 0 DeadThread...
  • Blog Post: Thread, System.Threading.Thread, and !Threads (II)

    With knowledge in my previous blog , we could avoid some mistakes in .NET programming. A C++ Thread is very resource heavy. It is associated with a lot of dynamically allocated memory and some OS handles. So it had better to be cleaned up ASAP after its corresponding OS thread dies. C++ Thread class...
  • Blog Post: Thread, System.Threading.Thread, and !Threads (I)

    If you use SOS’s !Threads command during debugging a lot, you should be familiar with such output: 0:003> !threads PDB symbol for mscorwks.dll not loaded Loaded Son of Strike data table version 5 from "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\mscorwks.dll" ThreadCount: 12 UnstartedThread...
  • Blog Post: Special threads in CLR

    Question: How many threads does a typical managed process have when it just starts to run? Answer: regardless how many threads the user creates, there are at least 3 threads for a common managed process after CLR starts up: a main thread which starts CLR and run user's Main method, CLR debugger helper...
  • Blog Post: Desctructor, finalizer, and Dispose - Part2.C++/CLI in Whidbey

    I changed the program in previous post to use new Whidbey syntax. using namespace System; ref class RefT { public: RefT () {Console::WriteLine ("RefT::RefT");} ~RefT () {Console::WriteLine ("RefT::~RefT");} !RefT () {Console::WriteLine ("RefT::!RefT");} }; value class ValueT { //constructor...
  • Blog Post: Desctructor, finalizer, and Dispose - Part 1.managed C++ extension in V1.X

    As a C++ fan, I'm a long time admirer for deterministic finalization. I think introduction of garbage collection to C style language by Java and .Net is a huge improvement. However, I found lose of deterministic destructor is almost unacceptable when I first enter Java/.Net world. Of course I'm used...
  • Blog Post: Figure out variable lifetime using SOS

    There is a bug in this program below, try to see if you could catch it. Test.cs (compiled to DelegateExample.exe): using System; using System.Threading; using System.Runtime.InteropServices; class Test { delegate uint ThreadProc (IntPtr arg); private uint m; public Test (uint n) { m...
  • Blog Post: Thread safety of Timer callbacks

    I didn't realize I've stopped blogging for 1 year. What a shame! Fortunately I didn’t waste the time: we ship Whidbey Beta1 and Beta2 in the past year! Now with Beta2 out of door, I have more spare time for blogging. :) Today I want to talk about some interesting facts about Timer in CLR. There is...
  • Blog Post: Dangerous PInvokes - string modification

    Objects in CLR are usually managed by the runtime in GC heap; user code does not have direct access to the objects. CLR's reliability and type safety heavily rely on this fact. But CLR also support InterOp features like COM InterOp, IJW and PInvoke to allow unmanaged code to touch managed objects directly...
  • Blog Post: FCall and GC hole - first post about Rotor

    An exsample of FCall My friend Joel Pobar had a great post to demo how to add new code to Rotor which exposes more EE(Execution Engine) internal information to managed world. This is a very good example covers both BCL and EE, and how the two parts interact with each other. As showed in this example...
  • Blog Post: OutOfMemoryException and Pinning

    As you all know, in CLR memory management is done by Garbage collector (GC). When GC can't find memory in preallocated memory chunk (GC heap) for new objects and can't book enough memory from the OS to expand GC heap, it throws OutOfMemoryException (OOM). The problem From time to time, I...
Page 1 of 1 (11 items)