zoukankan      html  css  js  c++  java
  • WinDbg的工作空间---Work Space

    一、什么是工作空间

    Windbg把和调试相关的所有配置称为workspaceWinDbg使用工作空间来描述和存储调试项目的属性、参数及调试器设置等信息。工作空间与vc中的项目文件很相似。退出windbg时,它会将会话配置保存在工作区中。工作区使您能够轻松地保留从一个会话到另一个会话的设置。您还可以手动保存或清除工作区,甚至可以使用工作区保存仍在进行中的调试会话。

    二、工作空间保存的信息

     

    WinDbg的工作空间中保存了一下信息:

    • 调试会话状态:包括,断点、打开的源文件、用户自定义别名。
    • 调试器设置:包括符号文件路径,可执行映像文件路径,源文件路径,用I+/I-命令设置的源文件选项,日志文件设置,通过启动内核调试对话框设置内核调试连接设置,最近一次打开文件对话框所使用的路径和输出设置等
    • WinDbg图形界面信息:包括WinDbg窗口标题、默认字体、是否自动打开反汇编窗口、窗口在桌面的位置、打开的子窗口、以及每个子窗口的状态等。

     

    当您使用windbg作为调试客户机时,它的工作区只保存您通过图形界面设置的值。不会保存通过调试器命令窗口所做的更改。(此限制保证只反映本地客户端所做的更改,因为调试器命令窗口接受来自所有客户端和调试服务器的输入。

    此外,断点信息保存在工作区中,包括断点地址和状态。会话结束时处于活动状态的断点在下一个会话启动时处于活动状态。但是,如果尚未加载适当的模块,那么其中一些断点可能无法解析。通过符号表达式、行号、数字地址或在源窗口中使用鼠标指定的断点都保存在工作区中。在反汇编或调用窗口中使用鼠标指定的断点不会保存在工作区中。 如果正在调试多个用户模式进程,则只保存与进程零关联的断点。

     

    三、工作空间保存的位置

    WinDbg默认使用注册表来保存工作空间设置,其路径为:HKEY_CURRENT_USER/Software/Microsoft/WinDBG/Workspaces,在此路径下有四个键:User、Kernel、Dump和Explicit。前三个键分别用来保存用户态调试、内核态调试、调试转储文件时使用的默认空间。Explicit用以存储命名的工作空间。在四个键下的每个键对应于一个工作空间。键值名为工作空间的名称,键值就是这个工作空间的配置数据。WinDbg支持使用文件来保存工作空间。这可以使用菜单Save workspace to File。使用Delete workSpaces可以删除工作空间。更快的方法是直接删除保存在注册表中的键值。

     

    四、工作空间分类

    WinDbg定义了两种工作空间,一种为默认工作空间,另一种为命名的工作空间。当没有明确使用某个命名空间时,WinDbg总是使用默认工作空间。

    • 默认工作空间
      windbg自己预先创建的一系列的空间
    • 命名空间
      可以把你的配置保存为一个命名的workspace保存在注册表中,并且在需要的时候应用它。Windbg软件本身也会根据你所调试的可执行程序或dump文件,自动保存为命名workspace。这就是为什么你调试了一次HelloWorld程序后,下次再次调试的时候,Windbg会自动打开很多相关的源文件,并自动加载符号的原因。

    五、WinDbg的默认工作空间

    WinDbg在安装后就有预先创建了一些列默认空间。分别为基础工作空间、默认内核工作空间、默认远程调试工作空间、特定处理器工作空间、默认用户态工作空间。它们分别定义了在WinDbg在各种条件下的一些配置、参数设置等。

    • 基础工作空间:当调试会话尚未建立,WinDbg处于闲置状态时,会使用此空间作为默认空间。
    • 默认内核工作空间:当WinDbg开始内核调试,但是尚未与调试目标建立连接时,会使用此空间作为默认空间。
    • 默认远程调试工作空间:当通过调试服务器进行远程调试时,会使用此空间作为默认空间。
    • 默认的用户态工作空间:当使用WinDbg调试一个已运行的进程时,会使用这个空间作为默认工作空间。
    • 特定处理器工作空间:在windbg连接到目标计算机之后,在内核模式调试期间使用特定于处理器的工作区。对于基于x86和基于x64的处理器,有单独的特定于处理器的工作区。

    当WinDbg打开一个应用程序开始调试时,调试器会 根据可执行文件的路径和文件名为其创建一个默认工作空间,如果已经存在工作空间,就使用已存在的。在WinDbg的文件菜单中可以使用另存为..创建一个命名的工作空间。

    六、工作空间的创建和加载

    当windbg创建用于调试的用户模式进程时,将为该可执行文件创建一个工作区。每个创建的可执行文件都有自己的工作区。当windbg分析转储文件时,将为该转储文件分析会话创建一个工作区。每个转储文件都有自己的工作区。开始调试会话时,将加载相应的工作区。结束调试会话或退出windbg时,将显示一个对话框,询问您是否要保存对当前工作区所做的更改。如果使用-qycommand line选项启动windbg,则不会显示此对话框,工作空间将自动保存。此外,如果使用-q命令行选项启动windbg,则不会显示此对话框,也不会保存任何更改。

    工作区以累积方式加载。基本工作区始终首先加载。开始特定调试操作时,将加载相应的工作区。因此,大多数调试是在加载两个工作区之后完成的。内核模式调试在加载了三个工作区(基本工作区、默认内核模式工作区和特定于处理器的工作区)之后完成。

     

    注意:调试信息窗口的布局是工作区累积行为的一个例外。每个窗口的位置、停靠状态和大小仅由您打开的最新工作区决定。此行为包括监视窗口的内容和在每个内存窗口中查看的位置。打开新工作区时,不会清除调试器命令窗口中的命令历史记录,但会重置所有其他窗口状态。 

     

    要访问基本工作区,请在没有目标的情况下启动windbg,或者在会话完成后单击“调试”菜单上的“停止调试”。然后,您可以在基本工作区中进行任何允许的编辑。您还可以为工作区命名,然后分别保存或加载它们。加载命名工作空间后,将禁用默认工作空间的所有自动加载和保存。命名工作区包含一些默认工作区不包含的附加信息
     
    七、工作空间的相关操作
    要控制工作区,可以执行以下操作:
    •  使用-w命令行选项打开并加载命名工作区。
    • 使用-wf命令行选项打开并从文件加载工作区。
    • 使用-wx命令行选项禁用所有自动工作区加载。只有显式工作区命令才能导致保存或加载工作区。
    • 通过单击“文件”菜单上的“打开工作区”或按ctrl+w打开并加载命名工作区。
    • 单击“文件”菜单上的“保存工作区”,保存当前默认工作区或当前命名工作区。
    • 为当前工作区分配一个名称,并通过单击“文件”菜单上的“将工作区另存为”将其保存。
    • 单击“文件”菜单上的“清除工作区”,从当前工作区中删除特定项目和设置。
    • 通过单击“文件”菜单上的“删除工作区”来删除工作区
    • 通过单击“文件”菜单上的“在文件中打开工作区”,从文件中打开并加载工作区。
    • 通过单击“文件”菜单上的“将工作区保存到文件”,将工作区保存到文件
  • 相关阅读:
    cf D. Vessels
    cf C. Hamburgers
    zoj 3758 Singles' Day
    zoj 3777 Problem Arrangement
    zoj 3778 Talented Chef
    hdu 5087 Revenge of LIS II
    zoj 3785 What day is that day?
    zoj 3787 Access System
    判断给定图是否存在合法拓扑排序
    树-堆结构练习——合并果子之哈夫曼树
  • 原文地址:https://www.cnblogs.com/yilang/p/11390078.html
Copyright © 2011-2022 走看看