Command line version of ModuleRescue

Command line version of ModuleRescue is available (can be found here).

Posted by Oleg Starodumov | with no comments

Debugging startup code of services and COM servers

New article on my web site: Debugging startup code of services and COM servers

Debugging the startup code of a service or an out-of-process COM server usually looks like a difficult task, especially if the service/server is running under a non-administrative user account. But in practice, there is a number of tools and techniques that can make this task much easier - almost as easy as debugging an interactive application.

StartDbg

New tool on my web site: StartDbg

StartDbg is a small tool that simplifies debugging of the startup code of services and COM server applications, even if they are running under non-administrative user accounts. In brief, it suspends the service or the COM server process for a predefined period of time, and allows us to attach debugger to the process while it is suspended. For additional information about the motivation behind creating this tool, take a look at this article.

 

Posted by Oleg Starodumov | with no comments

ClrDump updated

ClrDump has been updated.

New features:

  • Additional command line parameters for clrdump.exe that allow to control the size of the minidump
  • New API function, SetFilterOptions, that allows to control various aspects of the filter's functionality (currently it allows to specify whether to terminate the application immediately after the minidump has been created (the default), or pass control to the default exception handler provided by the operating system (which will usually report the error to the user via the standard Windows Error Reporting dialog and/or launch the registered just-in-time debugger)

 

Posted by Oleg Starodumov | with no comments

ClrDump - Create small minidumps of .NET applications

New tool on my web site: ClrDump (Beta)

ClrDump is an experimental set of tools that allow to produce small minidumps of managed applications. In the past, it was necessary to use full dumps (very large in size) if you needed to perform post-mortem analysis of a .NET application. ClrDump can produce small minidumps that contain enough information to recover the call stacks of all threads in the application. It supports .NET runtime versions 1.1 and 2.0.

 

WinDbg the easy way

New article on my web site: WinDbg the easy way

This article introduces CDB debugger as an effective complement to Visual Studio debugger for various advanced debugging tasks. It shows how to install and configure CDB, and how to use its command line options and commands for retrieving useful information about the internal state of the debuggee – without interrupting the main debugging session in Visual Studio.

 

SymGetEx - Automatic symbol server support for Visual C++ 6.0 debugger

New tool on my web site: SymGetEx 1.0

SymGetEx is an addition to Visual Studio 6.0, which allows Visual C++ debugger to automatically download symbols from symbol servers. With automatic symbol server support, it is easy to keep system symbols up-to-date, regardless of the number of system updates and hotfixes installed on the computer. In turn, good symbols for system DLLs help you get complete and informative call stacks when debugging your applications.

In the process of downloading symbols, SymGetEx provides detailed progress reports, which help to troubleshoot network failures and various symbol server issues. SymGetEx also allows to reduce unnecessary network traffic by maintaining the list of modules whose symbols should not be downloaded from the symbol server (exclusion list).

SymGetEx allows to enable or disable symbol server access on the fly, ensuring that the debugger uses symbol server only when it is really needed, and does not consume computing resources at other times.

Posted by Oleg Starodumov | with no comments

Debugging custom filters for unhandled exceptions

New article on my web site:
Debugging custom filters for unhandled exceptions

This article shows how to debug custom filters for unhandled exceptions, and how to ensure that our filter is always properly registered (which sometimes is not easy to do, especially if other components of the application want to register their own filters). We will also explore how the operating system registers and calls custom filters, and what system components may want to utilize custom filters for their own purposes (and thus interfere with our own filters).

Posted by Oleg Starodumov | with no comments

Unexpected user breakpoint in NTDLL.DLL

New tip on my web site:
http://www.debuginfo.com/tips/userbpntdll.html

This tip explains the reasons of unexpected user breakpoints in NTDLL.DLL, which we can sometimes encounter when debugging our applications.

Excluding modules from symbol server search

I have added a new category to my web site - Debugging Tips:
http://www.debuginfo.com/tips.html

Here is the first tip:
http://www.debuginfo.com/tips/symsrvexlist.html

This tip shows how to improve the startup time of our debugging sessions by excluding some modules from symbol server search. It can be especially useful for applications that use 3rd party components whose symbols are not available on Microsoft symbol server.

Posted by Oleg Starodumov | with no comments

New tool: ModuleRescue

New tool on my web site:
ModuleRescue

ModuleRescue can generate executable modules (.EXEs and .DLLs) from the module information stored in minidumps. The modules produced by the application are enough to let debuggers download symbols from the symbol server even if the real matching module is not available. It is useful in the situation when, while debugging a minidump, we cannot find matching module but know that symbols for the module are available on the symbol server. ModuleRescue can be also used to view the list of modules loaded by the application at the time when the minidump was created, and analyze such information as module load address, file and product version, availability of debug information.

Minidumps and matching modules

New article on my web site:
Minidumps and matching modules

In the process of debugging a minidump, matching modules are as important as matching symbols. If the debugger cannot find matching modules, it usually cannot load symbols and cannot show good call stacks and other kinds of important information. In this article we will explore how debuggers work with modules - where do they look for them, and what data do they use to check whether a module is matched. We will see how to configure the most popular debuggers to search for matching modules in correct places (module search path). We will also discuss situations when matching modules cannot be found, and try to find workarounds.

Posted by Oleg Starodumov | with no comments

NTSD as a better Dr. Watson

New article on my web site:
NTSD as a better Dr. Watson

Dr. Watson is probably the most popular just-in-time debugger for Windows applications. But do we have a better choice? This article discusses some limitations of Dr. Watson, and introduces another debugger, NTSD, which is more flexible, configurable, and capable of replacing Dr. Watson in many just-in-time debugging scenarios.

Posted by Oleg Starodumov | with no comments