WinDbg的工作空间---Work Space
一、什么是工作空间
Windbg把和调试相关的所有配置称为workspace。WinDbg使用工作空间来描述和存储调试项目的属性、参数及调试器设置等信息。工作空间与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,则不会显示此对话框,也不会保存任何更改。
工作区以累积方式加载。基本工作区始终首先加载。开始特定调试操作时,将加载相应的工作区。因此,大多数调试是在加载两个工作区之后完成的。内核模式调试在加载了三个工作区(基本工作区、默认内核模式工作区和特定于处理器的工作区)之后完成。
注意:调试信息窗口的布局是工作区累积行为的一个例外。每个窗口的位置、停靠状态和大小仅由您打开的最新工作区决定。此行为包括监视窗口的内容和在每个内存窗口中查看的位置。打开新工作区时,不会清除调试器命令窗口中的命令历史记录,但会重置所有其他窗口状态。
- 使用-w命令行选项打开并加载命名工作区。
- 使用-wf命令行选项打开并从文件加载工作区。
- 使用-wx命令行选项禁用所有自动工作区加载。只有显式工作区命令才能导致保存或加载工作区。
- 通过单击“文件”菜单上的“打开工作区”或按ctrl+w打开并加载命名工作区。
- 单击“文件”菜单上的“保存工作区”,保存当前默认工作区或当前命名工作区。
- 为当前工作区分配一个名称,并通过单击“文件”菜单上的“将工作区另存为”将其保存。
- 单击“文件”菜单上的“清除工作区”,从当前工作区中删除特定项目和设置。
- 通过单击“文件”菜单上的“删除工作区”来删除工作区
- 通过单击“文件”菜单上的“在文件中打开工作区”,从文件中打开并加载工作区。
- 通过单击“文件”菜单上的“将工作区保存到文件”,将工作区保存到文件
WinDbg的工作空间---Work Space的更多相关文章
- Windbg的主题---Theme
主题是预配置的windbg工作区,其中包含调试信息窗口的有用配置.任何主题都可以保存为基本工作区.Windows调试工具包中的主题作为一组注册表文件(扩展名为.reg)提供.当您积累更多的调试会话时, ...
- Windbg用法详解
工作空间 WinDBG的工作空间中保存了以下几种信息 调试会话状态: 包括断点,打开的源文件,用户定义的别名(alias)等. 调试器设置:包括符号文件路径,可执行映像文件路径,源文件路径,用I+/I ...
- WinDbg使用介绍
Windbg工作空间 WinDbg使用工作空间来描述和存储调试项目的属性.参数及调试器设置等信息.工作空间与vc中的项目文件很相似.WinDbg定义了两种工作空间,一种为默认工作空间,另一种为命名的工 ...
- WWDC2018 之 优化 App Assets Optimizing App Assets
该篇博客记录了观看WWDC Session227<Optimizing App Assets>的内容以及一些理解. 引言 该session主要讲述了使用Assets Catalog的新特性 ...
- Windbg 基础命令 《第一篇》
Windbg.exe是Windows的一个调试工具,它支持两种调试模式,即“实时调试模式(Living)”和“事后调试模式(Postmortem)”. 实时模式:被调试的程序正在运行当中,调试器可以实 ...
- Windbg调试命令详解
作者:张佩][原文:http://www.yiiyee.cn/Blog] 1. 概述 用户成功安装微软Windows调试工具集后,能够在安装目录下发现四个调试器程序,分别是:cdb.exe.ntsd. ...
- 调试SQLSERVER (三)使用Windbg调试SQLSERVER的一些命令
调试SQLSERVER (三)使用Windbg调试SQLSERVER的一些命令 调试SQLSERVER (一)生成dump文件的方法调试SQLSERVER (二)使用Windbg调试SQLSERVER ...
- Windbg程序调试--转载
WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件. WinDbg是微软很重要的诊断调试工具: 可以查 ...
- ROS创建工作空间(三)
查看正在使用的ROS工作空间,使用命令 echo $ROS_PACKAGE_PATH 我新建了两个
随机推荐
- windwos源码安装mysql
进入官网下载相关的mysql安装文件,解压到指定目录如E:\mysql-5.7.23-winx64下,然后进入该目录下新建data文件夹与my.ini文件,在my.ini文件中 [mysqld] po ...
- 用LabVIEW做声源定位系统
前一阵子,研发部举办了为期三天的第一届Innovation Day,让大家用3天时间去完成工作之外的一些创意.有人做微信小程序,有人继续研究一些工作中用到的Tool,有人把一直想解决而没时间解决的老b ...
- C++11 新特性之智能指针(shared_ptr, unique_ptr, weak_ptr)
这是C++11新特性介绍的第五部分,涉及到智能指针的相关内容(shared_ptr, unique_ptr, weak_ptr). shared_ptr shared_ptr 基本用法 shared_ ...
- $(...).wordExport is not a function
参考网址:https://laod.cn/code-audit/jquery-is-not-a-function.html 问题描述: 1.view页面引用的是jquery-1.10.2.min.j ...
- Error creating bean with name 'XXX' defined in file
这个错误是我在之前操作时,错将另一个dubbo服务器也加载到了该dubbo服务器上(pom.xml),所以出现了Error creating bean with name 'XXX' defined ...
- 【开发笔记】- Java写入、读取文本
文本写入 public static void createFile(String input) throws IOException { //设置文件路径 String filePath = &qu ...
- Android存储及getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()区别
存储介绍 Android系统分为内部存储和外部存储,内部存储是手机系统自带的存储,一般空间都比较小,外部存储一般是SD卡的存储,空间一般都比较大,但不一定可用或者剩余空间可能不足.一般我们存储内容都会 ...
- springcloud中gateway的实际应用
之前我一直用的是Zuul网关,用过gateway以后感觉比Zuul功能还是强大很多. Spring Cloud Gateway是基于Spring5.0,Spring Boot2.0和Project R ...
- FIneUICore 版本的 AppBoxMvcCore
http://www.51aspx.com/code/codename/64088 CORE版本的APPBOXMVC欢迎下载
- 深入理解JVM-内存溢出案例演示与分析
1.java堆溢出 思路:Java堆用于存储对象实例,只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象, 那么在对象数量到达最大堆的容量限制后就会产生内存 ...