Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WinDbg fails to load SOS.dll

Tags:

windbg

I need to debug a 32-bit managed application using WinDbg, however WinDbg stubbornly refuses to load the SOS.dll extension. After many Internet searches and things tried I'm stumped. I have experience debugging unmanaged code with WinDbg but this is my first attempt with managed.

When I direct WinDbg to load the default SOS.dll it gives this error:

sxe ld clr                <- I wait until the clr has loaded .loadby sos clr  The call to LoadLibrary(C:\Windows\Microsoft.NET\Framework\v4.0.30319\sos) failed,     Win32 error 0n193     "%1 is not a valid Win32 application." Please check your debugger configuration and/or network access. 

And if I instead attempt to specify the SOS.dll I receive a different error:

.load C:\Windows\Microsoft.NET\Framework\v4.0.30319\sos clr  The call to LoadLibrary(C:\Windows\Microsoft.NET\Framework\v4.0.30319\sos clr) failed, Win32 error 0n126     "The specified module could not be found." Please check your debugger configuration and/or network access. 

My setup is VM-to-VM over serial connection and both VMs are Windows Server 2008 R2 SP1. Debugging Tools For Windows (x64) is installed in both VMs.

NOTE: It appears installing x86 Debugging Tools on a x64 CPU as is suggested in this solution is not possible (nor necessary) in newer Windows OS's so please don't suggest it. The installer fails with an error.

Thanks in advance for your ideas.

like image 786
mvwhyatt Avatar asked Mar 17 '14 17:03

mvwhyatt


People also ask

What is SOS DLL?

The SOS Debugging Extension (SOS. dll) helps you debug managed programs in Visual Studio and in the Windows debugger (WinDbg.exe) by providing information about the internal Common Language Runtime (CLR) environment. This tool requires your project to have unmanaged debugging enabled.

Where can I find SOS DLL?

You can find it in C:\WINDOWS\Microsoft.NET\Framework\v4. 0.30319\sos. dll path. To get SOS automatically downloaded you need to have the Microsoft symbol servers set up in the _NT_SYMBOL_PATH environment variable.


1 Answers

It is possible to install both x86 and x64 version of WinDbg on the same machine, and if you're debugging a 32 bit .NET app you should use the x86 version of WinDbg/SOS. The error message is telling you that you're trying to load the wrong version of SOS for the bitness of the application.

There's some additional guidance here.

like image 127
Brian Rasmussen Avatar answered Oct 12 '22 13:10

Brian Rasmussen