-
Notifications
You must be signed in to change notification settings - Fork 382
Description
Background and Motivation
I regularly use SOS to diagnose issues (particularly from user submitted crash dumps), but also live debugging sessions. The particular software application in my case is a large complex hybrid composed of both managed and native components. Quite often, hundreds of native DLLs will be loaded into the process. As soon as !pe or !clrstack is invoked, it appears that these commands first blindly (attempt to) load symbols for every DLL that's loaded in the process, regardless of whether it's managed or not. Loading hundreds of symbol files can be excruciating slow, and it doesn't seem to matter if they are locally cached or not, so there is a huge delay for each dmp file that needs to be examined.
In native debugging generally, symbols are more intelligently loaded on demand. In addition, there would seem to be little value in loading symbols for native DLLs to support a managed debugging extension.
This behavior was definitely not always present in SOS, though I'm not sure just when it was introduced. If for some reason, full symbols are actually necessary, why not let the user decide? I'd rather see a warning than wait for all symbols to load, especially if none of them will actually appear in the stack or be relevant to the managed issue at hand. Assuming that all managed applications are entirely composed of managed assemblies is naive in the extreme.
Please let me know if there is an existing work-around for the problem described.