by Mark Shiffer
3/28/2008 2:53:00 PM
WinDbg is a great tool once you can get passed some of its archaic syntax. For advanced debugging, I know of no other way to dig deep and solve the problems. For hard core memory or threading issues, WinDbg is a must have. So, that being said, a colleague of mine gave me this listing of common WinDbg commands, which he grabbed from somewhere out there and added to. I then added more to it as I read Debuggin Microsoft.NET 2.0 Applications by John Robbins. So I am putting it out here for further reference.
Mark's WinDbg Common commands.doc (75.00 kb)
by Mark Shiffer
3/15/2008 10:37:00 AM
Get ready for the matrix that is the mother of all others. Here is a link to the Visual Studio 2008 Feature Comparison Chart or Visual Studio 2008 Edition Comparison Chart. It is enormous, but helpful, thus why I am linking to it.
by Mark Shiffer
3/7/2008 10:49:00 PM
Is a pain in the ass. Yes, I said it, sorry. I know a there are a growing number of people out there using Firefox. Heck, I used to be one of them back when IE sucked, but it doesn't suck anymore. For those who are in Firefox, note that I finally got around to fixing a display issue with Firefox for this blog today. It had to do with a div that I had overflow set to visible on. It worked fine in IE, but in Firefox it caused the div not to stretch with its content. By switching the overflow to hidden, the content then displayed correctly, the div stretched in both IE and Firefox.
My question is, why? Why do different browsers interpret the same code in different ways, when there are, and have been, known standards out there for how to interpret the code? I am hoping IE 8 and its standards by default mode might help the symbiosis here, but come on, we are nearly 20 years into graphical browsers at this point. It shouldn't be this difficult to find these minute display issues.
by Mark Shiffer
3/4/2008 8:25:00 AM
I just read about a useful .NET tool that I had not previously heard of. It is called the Fusion Log Viewer (or Asembly Binding Log Viewer). It ships with the Framework SDK as fuslogvw.exe and will display the assembly loading details for a .NET program. Between probing elements, GAC, satellite assemblies and dependent assemblies, this tool could come in handy if you are having issues in this area.
by Mark Shiffer
2/27/2008 8:22:00 AM
Windows Error Reporting is a 'free' service from Microsoft that integrates into your product and allows end-users to report detailed error information to Microsoft. Microsoft then passes this information on to the vendor (you) in the form of mini-dumps and error reports that can then be debugged inside of Visual Studio and/or WinDbg. This seems like an invaluable service to an ISV that runs their products on Windows. For WinForm applications, there is a dialog that appears that allows the user to click 'Send Error Report'. I would hope there is also a way to automate the error reporting as there could be no user interface to the product (e.g., Windows Services).
The kicker to WER is that you need to have a digital certificate which is not cheap. However, depending upon the breadth of your customer base, it may be well worth it.
by Mark Shiffer
2/27/2008 8:13:00 AM
Microsoft has a shareware starter kit that appears to provide quite a few useful tools to help a new author get started and it is free of charge. Here is a run down of some of the features:
-
Buy Now Web Service
-
Activate Now Web Service
-
Product Registration Web Service
-
Product Feedback Web Service
-
Exception Handling Web Service
-
Multi-Threaded Splash Screen
-
Configure Your Token
-
Upgrade Version Web Service
-
Log File Web Service
-
Custom Developer Portal
by Mark Shiffer
1/15/2008 9:15:00 AM
A little late on finishing this one as I got distracted by quite a few things, but I did finish it. All-in-all this book is an excellent read for anyone wanting a more in-depth understanding of .NET/CLR under the hood. There are several rants that Jeffrey goes into that I wish would have been left out or at least put in comment boxes. He mixes his opinion of coding standards and styles in with the factual information he provides, and I just would rather not see that. I am reading the book for the facts not for his coding style opinions. Regardless, he still provides a great deal of excellent information on the likes of Garbage Collection, Reflection, AppDomains, Threading, etc... It is not a tell-all book about each subject, but it does go into the kind of information that you just will not find in many other places. There was quite a lengthy bit in the middle of the book that seemed like filler material to me where he goes into "Essential Types". There were tid-bits of good information in there, but not enough to warrant the 150 pages he dedicated to it. However, in summary, any serious .NET developer should read this book or have it as a reference. I just hope some of it will sink into my thick skull. I plan on keeping it handy as a reference as well, as there was so much in there that I am certain I will not be able to retain it all.
by Mark Shiffer
1/3/2008 8:15:00 AM
.NET has two properties to help in determining that things are coming to an end. The IsFinalizingForUnload property off of an AppDomain tells whether the application domain is in the process of unloading. The HasShutdownStarted property off of the System.Environment class tells whether the process is being terminated. These may be useful properties to know about under certain circumstances, although I have not had an opportunity to employ them.
by Mark Shiffer
1/2/2008 2:24:00 PM
CriticalFinalizerObject is an abstract class in .NET (System.Runtime.ConstrainedExecution) that gives the following to its inherited classes:
1. As part of the class' construction the CLR JIT compiles the finalize methods in the inheritance hierarchy. This helps guarantee that the finalizer will be able to be called, even under low memory conditions when the JIT compile might not be able to function
2. The finalize of method of derived classes happens after the finalize method of classes that do not derive from CriticalFinalizerObject.
3. The finanlize method will be called even under a sudden abort by the application host.
by Mark Shiffer
12/31/2007 4:41:00 PM
If you are in a catch block that has not specified a catch type variable; therefore you do not have an exception variable, you can use $exception in the watch window to obtain the reference to the exception.