zoukankan      html  css  js  c++  java
  • 调试器扩展SOS

    SOS是一个调试器扩展,用于调试.NET应用程序。它提供了一组非常丰富的命令,这些命令使开发人员可以对CLR进行深入分析,并且有助于找出应用程序中各种复杂错误的原因。

     
    由于SOS能够提供CLR内部工作机制的抽象视图,因此在使用SOS进行调试时,必须使用正确的版本。每个版本的.NET在发布时都带有相应的SOS,可以在以下位置找到:
     
    %windir%\Microsoft.NET\\\sos.dll
     
    其中,“Architecture”的值可以是Framework(32位)或者Framework64(64位),而version的值则表示所使用的.NET框架版本。
     
    在使用SOS之前,必须先通过.load命令将其加载到调试器中。如果加载的版本不对,会提示如下信息:
    The call to LoadLibrary(C:\Windows\Microsoft.NET\Framework\v2.0.50727\sos.dll) f
    ailed, Win32 error 0n193
        "%1 is not a valid Win32 application."
    Please check your debugger configuration and/or network access.
     
     
    在成功加载SOS之后,执行扩展命令!help,这个命令将显示SOS中包含的一组命令。
     
    接下来通过!Threads命令可以显示出进程中的所有托管线程。如:
     
    0:000> .load C:\Windows\Microsoft.NET\Framework64\v2.0.50727\sos.dll
    0:000> !Threads
    Failed to find runtime DLL (mscorwks.dll), 0x80004005
    Extension commands need mscorwks.dll in order to have something to do.
    0:000>
     
    结果显示一个错误信息,表示没有找到mscorwks.dll。
     
    当第一次加载.NET应用程序时,CLR将同时加载和初始化。负责实现运行时的库是mscorwks.dll。SOS返回的错误信息表示当前进程不是一个.NET进程,或者当前还没有加载运行时,因此这些调试器扩展命令不可用。
     
    也可以不指定SOS的完整路径,可以使用调试命令.loadby。 .loadby 。
     
    “.loadby sos.dll mscorwks”表示从mscorwks.dll所在的目录中加载SOS。
     
    0:000> .loadby sos.dll mscorwks
    Unable to find module 'mscorwks'
    0:000>
     
    如果遇到这个错误信息:“Unable to find module 'mscorwks'”,可以尝试使用命令如下:
     
    0:000> sxe -c "" clrn
    0:000> g
     
    执行完之后再尝试使用“.loadby sos.dll mscorwks”,应该就正常了。
     
    遇到如下错误信息,也可以尝试先使用命令"sxe -c "" clrn","g"来先加载运行时:
     
    Failed to find runtime DLL (mscorwks.dll), 0x80004005
    Extension commands need mscorwks.dll in order to have something to do.
     
    使用!dumpdomain命令时出现如下错误信息:
     
    *** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\W
    indows\Microsoft.NET\Framework64\v2.0.50727\mscorwks.dll -
    或者
    0:000> !dumpdomain
    PDB symbol for mscorwks.dll not loaded
     
    需要先加载符号文件。
     
    使用命令!sym noisy来开启符号文件加载信息的详细输出。
     
    0:000> !sym noisy
    noisy mode - symbol prompts off
    0:000> !sym - prompts
    noisy mode - symbol prompts on
    0:000>
     
    通过如下命令可以成功加载符号文件:
     
    0:000> .sympath srv*c:\symstore.pri*http://msdl.microsoft.com/download/symbols
     
    使用.reload /f命令可以加载应用程序中用到的所有模块。
     
    加载完符号文件以及SOS扩展之后,使用!dumpdomain命令,如果还出现如下错误信息:
     
    0:000> !dumpdomain
    --------------------------------------
    System Domain: 0000000000000000
    Unable to get system domain info
     
    请尝试关闭应用程序之后再打开调试器进行,应该之后会OK的。
  • 相关阅读:
    Something about the "BSTR" and "SysStringLen"
    关于 i = i ++ 的问题
    duilib写个三国杀?
    关于WM_GETTEXT的应用
    hoops暂时用过的一些方法
    Hoops随便记的
    C++ win32线程数上限
    windows系统时间(SYSTEMTIME)
    Form表单提交的那些事
    多行文字溢出...
  • 原文地址:https://www.cnblogs.com/yumianhu/p/3710755.html
Copyright © 2011-2022 走看看