Não foi possível carregar o SOS no WinDbg

132

Antecedentes: Sou novo no WinDbg e estou tentando executá-lo pela primeira vez. Desejo examinar um despejo de memória que tirei de um site em execução do ASP.NET 4 hospedado no IIS 7 no Windows Server 2008 (x86) e baixei na minha máquina local.

Instalei as ferramentas de depuração e iniciei o WinDbg pela primeira vez, abrindo o despejo de memória. Eu fui ao arquivo | Caminho do arquivo de símbolos e defina o caminho para *srv*c:\symbols*http://msdl.microsoft.com/download/symbols*e espere que todos os símbolos sejam carregados.

Ao tentar carregar o SOS, tive problemas. Primeiro, tentei o seguinte comando ...

.loadby sos mscorwks

... e recebeu a resposta Unable to find module 'mscorwks'.

Depois de vasculhar a web, tentei carregar o mscorwks executando o seguinte comando ...

sxe ld mscorwks.dll
g

... e recebeu a resposta "Nenhum erro de depuração executável em 'g'"

Copiei o SOS.dll (de C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319) para o diretório WinDbg e tentei ...

.load sos

... e recebeu o erro ...

The call to LoadLibrary(sos) failed, Win32 error 0n193
    "%1 is not a valid Win32 application."
Please check your debugger configuration and/or network access.

Não tenho muita certeza de como proceder. Eu só quero carregar o SOS e vasculhar esse arquivo de despejo. Qualquer ajuda seria muito apreciada.

Fyi ... Estou tentando abrir o arquivo de despejo em uma versão de 64 bits do Windows 7 com a versão de 64 bits do Windbg.

Kevin Babcock
fonte

Respostas:

203

A dll de tempo de execução do CLR foi renomeada para clr.dll.NET 4. Portanto, para carregar a versão correta do SOS, você precisa ajustar seu .loadbycomando. Ou seja,

.loadby sos clr

Além disso, se você estiver em 64 bits, instale também a versão de 32 bits do Debugging Tools for Windows para poder depurar aplicativos de 32 bits. Eles são instalados lado a lado, portanto não há problema em ter as versões de 32 e 64 bits na mesma máquina.

Eu recomendaria contra copiar SOS.dll. O SOS precisa corresponder à versão exata da estrutura, desde que você a carregue do diretório da estrutura .loadby, tudo estará pronto.

Brian Rasmussen
fonte
Estou achando difícil colocar os dois no meu sistema, já que os instaladores mais recentes detectam automaticamente o tipo de CPU. Existe um sinalizador de substituição que você conhece para o msi? Vou instalar uma versão antiga de 32 bits do WinDbg, mas não sei o que esperar.
Dave
5
@ Dave: Talvez seja tarde demais, mas de acordo com a página de instalação encontrada aqui: msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx, você pode optar por instalar os pacotes redistribuíveis que colocam MSIs para cada versão da arquitetura aqui : C: \ Arquivos de programas \ Microsoft SDKs \ Windows \ v7.1 \ Redist \ Debugging Tools for Windows
Aaron Lerch
Se eu disser .loadby sos clrque entendo Unable to find module 'clr'. Eu estou tentando depurar .NET 4 com x64 WinDbg
Csaba Toth
2
@CsabaToth é um despejo ou você está fazendo depuração ao vivo? Se você estiver fazendo depuração ao vivo, o CLR talvez ainda não tenha sido carregado. Você pode fazer sxe ld clrpara parar quando o CLR tiver sido carregado e carregar o SOS nesse ponto.
Brian Rasmussen
@BrianRasmussen É um executável compilado. Se eu der uma olhada na janela Módulos, clique nela carregada.
Csaba Toth
18

O comando WinDbg 'g' significa [Continuar]

Como você está abrindo um arquivo de despejo, não há como 'continuar', ele contém apenas a memória do processo.

Portanto, a mensagem "Nenhum erro de depuração executável em 'g'" é lógica no seu caso, pois o processo não está em execução .

Em relação ao carregamento da versão correta do SOS, use o seguinte comando, dependendo da versão do .NET.

.NET 4 e superior .loadby sos

.NET 3.5 e 2 .loadby sos mscorwks

.NET 1.0 e 1.1 .load clr10 \ sos

HerbalMart
fonte
1

As respostas acima precisam ser aprimoradas, pois ao longo do tempo as coisas ficaram mais fáceis de lidar com o carregamento sos.

JOHN ROBBINS tem um bom artigo , veja que os servidores de símbolos da Microsoft estão configurados no caminho do arquivo de símbolos e executam! Analyse -v no prompt do windbg, isso fará o truque de baixar arquivos sos relevantes. Para verificar, execute .chain no prompt e você verá a dll carregada.

Kiran Prabhu
fonte
0

Acabei de encontrar um problema semelhante ao carregar o SOS e estava recebendo "o módulo especificado não pôde ser encontrado". Como surgiu uma solução diferente, portanto, se as soluções aqui não ajudarem, tente o seguinte:

.loadby sos clr - o módulo especificado não pôde ser encontrado

Denis
fonte