我遵循Tess Ferrandez' blog在WinDbg中设置自定义主题。
我也已经开始使用-c“.cmdtree c:\mycmdtree.txt”自动启动WinDbg。
这可以正确打开我的cmdtree文件作为命令窗口,但是我无法使其正确停靠。问题似乎在于,只有在打开DMP文件后才能打开“命令”窗口,但是打开DMP文件会将您从“基本”工作区中移出,因此不会保存对工作区的任何更改。
有任何想法吗?
这个简单的请求变得非常复杂。 WinDbg的窗口位置保存在工作区中。 WinDbg有几个默认工作区:
Base-这是开始调试之前使用的工作空间(没有打开转储,没有打开exe,没有附加任何内容)
每个转储文件-对于您打开的每个转储,您都有一个用于该文件的工作区
每个可执行文件-针对您打开的每个可执行文件。
用户模式-在实时用户模式调试时使用
内核模式-在调试内核模式时使用
每台计算机体系结构-1个用于x64、1个用于x86和1个用于IA64
Remote-在远程调试时使用
对于任何给定的调试类型(即实时用户模式或事后分析分析),您通常最终都会遇到Base +您的调试类型设置的组合。
如果打开转储文件,则将获得BASE +每个转储文件
如果进行用户模式调试,则将获得BASE + User-mode
如果对x64机器进行内核调试,则会得到BASE + Kernel-mode + x64
您在任何给定模式下所做的所有更改都保存在最后重叠的工作空间中。这意味着,如果我们打开一个转储文件(因此我们是“基本+每个”转储),则对设置的任何更改都将保存在该转储的工作空间中。
除了内置工作空间及其所有组合之外,还有命名的(客户)工作空间。这些是当您转到"file">“保存工作区”,并提供一个名称来保存所有设置的情况,然后您可以在启动Windbg时使用-W命令行参数启用该设置。
回到您的问题。我怎样才能打开.cmdtree?在基本工作区中,您不能这样做。仅当调试器未处于休眠状态(在其BASE工作空间中)时,许多窗 Eloquent 可用。一旦使调试器进入任何事件状态,这些窗口便可用。
您遇到的问题是,为了以所需的方式进行所有设置,您必须使调试器处于事件状态(exe打开,dump打开,实时调试),并且当您保存窗口布局时,它还将保存您正在打开,转储或实时调试的exe文件。
最好的选择是执行已做的事情,即只在注册表中使用-c(HKEY_CLASSES_ROOT\WinDbg.DumpFile.1\shell\Open\command)。这样,您每次双击转储时就可以双击并获得这些命令行选项。然后,您可以创建windbg的快捷方式,该快捷方式还包含命令行,因此这些设置将应用于您执行的其他调试类型。
这是我上面的regkey的命令行:
“c:\debuggers\x64\windbg.exe” -z“%1” -Q -W内部-c“.load winde.dll; .enable_unicode 1; .ignore_missing_pages 1; .logopen/t C:\Users\jasone\Logs\debug.log; aS .p .process/p/r; aS .t .thread/p/r; aS!p!process; aS!t!thread; aS .f .frame; aS dv dv/V/i/t; aS .f .frame”
这是做什么的?
启动调试器,附加到转储文件,不提示保存工作区设置,打开我的“内部”工作区(我创建的命名工作区),然后运行以下命令来加载调试器扩展,设置首选项并创建别名,从而使我的生活更轻松。
我是一名优秀的程序员,十分优秀!