• windbg Symbol file path


    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:WindowsMicrosoft.NETFrameworkv2.0.50727sos.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:WindowsMicrosoft.NETFramework64v2.0.50727sos.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
    indowsMicrosoft.NETFramework64v2.0.50727mscorwks.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的。

    我的一台Win2008R2(64位)安装了VS2012和windbg32位版。
    用VC2012编了个简单的32位控制台程序ConsoleApplication1,并创建C:MyLocalSymbols目录,然后启动windbg:

    (1)设置File-->Symbol file path填入:
    C:MyLocalSymbols;SRV*C:MyLocalSymbols*http://msdl.microsoft.com/download/symbols

    (2)File-->Open executable打开ConsoleApplication1,
    进入Windbg的窗口:

    C/C++ code?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Microsoft (R) Windows Debugger Version 6.11.0001.404 X86
    Copyright (c) Microsoft Corporation. All rights reserved.
     
    CommandLine: "C:UsersAdministratorDocumentsVisual Studio 2012ProjectsConsoleApplication1DebugConsoleApplication1.exe"
    Symbol search path is: C:MyLocalSymbols;SRV*C:MyLocalSymbols*http://msdl.microsoft.com/download/symbols
    Executable search path is: 
    ModLoad: 00200000 00228000   ConsoleApplication1.exe
    ModLoad: 77c40000 77dc0000   ntdll.dll
    ModLoad: 75f90000 760a0000   C:Windowssyswow64kernel32.dll
    ModLoad: 76160000 761a6000   C:Windowssyswow64KERNELBASE.dll
    ModLoad: 0f660000 0f72b000   C:WindowsSysWOW64MSVCP110D.dll
    ModLoad: 0f150000 0f2f1000   C:WindowsSysWOW64MSVCR110D.dll
    (1e20.1e0c): Break instruction exception - code 80000003 (first chance)
    eax=00000000 ebx=00000000 ecx=cc7e0000 edx=002ae018 esi=fffffffe edi=00000000
    eip=77ce0f3b esp=003af90c ebp=003af938 iopl=0         nv up ei pl zr na pe nc
    cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000246
    *** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntdll.dll - 
    ntdll!LdrVerifyImageMatchesChecksum+0x96c:
    77ce0f3b cc              int     3
    0:000> .sympath
    Symbol search path is: C:MyLocalSymbols;SRV*C:MyLocalSymbols*http://msdl.microsoft.com/download/symbols
    Expanded Symbol search path is: c:mylocalsymbols;srv*c:mylocalsymbols*http://msdl.microsoft.com/download/symbols


    明明用.sympath已经看到我正确设置了符号文件路径,而且C盘下面的MyLocalSymbols里面也有了不少东西,如下图所示:

  • 相关阅读:
    31
    30
    29
    28
    27
    26
    25
    23
    cesium 基础
    操作SDO_GEOMETRY字段
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3411531.html
Copyright © 2020-2023  润新知