Last week i got the new Advanced .NET Debugging book by Mario Hewardt (co-authored with Daniel Pravat) in the mail. I had the pleasure of tech reviewing it earlier this year and it is a really good deep dive in .net debugging and .net internals.
The book talks about debugging .net apps with WinDbg and with PowerDBG (Powershell scripts for debugging by Roberto Farah) as well as other tools and techniques for debugging .net apps, and is well worth a read if you are interested in .net debugging.
What other books (if any) would you recommend for brushing up on advanced debugging?
Advanced debugging? Where are the beginning debugging books? :}
my favourite is John Robbins .net debugging book. It's good for advanced and beginner .net debuggers. In reality it's a book about troubleshooting in general sprinkled with lots of good post-mortem debugging tips.
I have both John Robbins and Mario Hewardt books. I really recommend them, for begginers and advanced debuggers.
hi tess, can u send a copy of the book to me .
Tess, When a you going to write a book?
John Robbins's .net debugging book<<Debugging Applications for Microsoft .NET and Microsoft Windows>> was published on March 26, 2003 . It's too old. :(
The john robbins book deals a lot with how to think when debugging certain problems, and the good part is that this hasn't changed much since 2003.
Although there are a lot of new profiling tools on the market pretty much all that is said in that book still holds. The things that change are the technologies you debug, but the same practices can be applied to debugging older technologies as newer ones. The types of problems that you could create in your .NET apps back then (hangs, crashes, memory leaks, exceptions etc.) are also very much the same... so i think even though it's from 2003 it's still a very valuable book.
Tess, how useful would you say this book would be for .Net 1.0 apps (I note even the *ancient* John Robbins one is 2.0)?
Tim, I would say that it is useful for 1.0 as well given that the core of the framework has been the same all the time as well as .net debugging. The problems have changed but both this and the Robbins book talk a lot about concepts that have been the same throughout all the versions
Ok, thanks - I'll give it a try.
I have read few it's chapters and found it very use full to get knowledge on working of CLR and how to use sos.dll with windbg to see what is happening when a .net application gets executed.
Tim , i have been searching for this book on net to download a copy for myself but could not found it. could you please send a copy for me on firstname.lastname@example.org.
I have posted the same comments at another site but I thought I would post them here as well because this book should save time to practitioners, and not require them to battle various issues while trying to learn. The comments below were sent to the author:
I have listed below various issues that I encountered so far in the book, - some of them are just typos, others are questions, and, so far, there is one annoying issue that I keep running into related to the 05Native.cpp file. The file is missing functions that are referred in the book, and I had to add code myself. It would be good to post the updated file just to save readers some time . I have a couple of chapters to go through but, overall, this is a very nice book despite my complaints :
• Page 201 – setting the “!bpmd –md 001e3250” doesn’t work. Cannot break at this point. Tried using “!mx 04codegen!*add*” and then “!mbm *!Advanced.NET.Debugging.Chapter4.CodeGen+Add 0” and that didn’t work either.
• Page 234 – there is no such sample code in the source folder Chapter5, or in the binaries.
• Page 259 has a typo: “The next object begins at address 0x1c65928”, should be: 0x1c65968
• Page 301 – “Event is waiting” not clear. Events could be in signaled and nonsignaled state, so, what does the waiting state mean? Does it mean that it is in signaled state and is waiting to be reset?
• Page 303 – the command line “!handle 238 8” – not clear what the last ‘8’ means? I assume this is just a typo.
• Page 336 – [DllImport(“06Native.dll”)] – typo should be 05Native.dll.
• Page 350 – 05Native.cpp doesn’t have Myfunc() function. Needed to create one myself.
• Page 352 – after typing “dv (NOTE: I am using WinDbg) ”, I got this message:
o Breakpoint 0 hit
o eax=00953044 ebx=00181e28 ecx=00199a88 edx=00000000 esi=0012f3f8 edi=0012f69c
o eip=10011580 esp=0012f3c8 ebp=0012f3e0 iopl=0 nv up ei pl zr na pe nc
o cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
o 10011580 55 push ebp
o 0:000> dv
o Unable to enumerate locals, HRESULT 0x80004005
o Private symbols (symbols.pri) are required for locals.
• Page 361 in WinDbg after I typed “!lines” command, I received this message:
o Line number information will not be loaded
o *** WARNING: Unable to verify checksum for D:\Downloads\Books\AdvancedDotnetDebugging\Chapter7\Sig\05Native.dll
• Page 365 – 05Native.cpp doesn’t have AsyncProcess function defined. This file really needs to be updated. The 05Native.dll in the Binaries folder also doesn’t seem to have this function.