如何在WinDbg启动时使'.cmdtree'窗口停靠?

时间:2010-04-16 18:03:59

标签: windbg dmp

我已按照Tess Ferrandez' blog在WinDbg中设置自定义主题。

我也开始使用-c“.cmdtree c:\ mycmdtree.txt”自动启动WinDbg

这正确地将我的cmdtree文件作为命令窗口打开,但我无法正确停靠。问题似乎是“命令”窗口只能在打开DMP文件后打开,但打开DMP文件会将您切换出“基础”工作区,因此不会保存对工作区的任何更改。

有什么想法吗?

1 个答案:

答案 0 :(得分:7)

这个简单的请求变得非常复杂。 WinDbg的窗口位置保存在工作区中。 WinDbg有几个默认工作区:

  • Base - 这是在开始调试之前使用的工作区(没有转储打开,没有exe打开,没有附加到任何东西)
  • 每个转储文件 - 对于您打开的每个转储,您都有一个此文件的工作区
  • 每个可执行文件 - 对于您打开的每个可执行文件。
  • 用户模式 ​​- 用于实时用户模式调试时使用
  • 内核模式 - 在内核模式调试时使用
  • 每台机器架构 - 1代表x64,1代表x86,& 1 for IA64
  • 远程 - 在远程调试时使用

对于任何给定类型的调试(即实时用户模式或事后转储分析),您通常最终会得到Base +您的调试类型的组合。

如果打开转储文件,则会获得BASE + Per转储文件 如果您使用用户模式调试,则会获得BASE +用户模式 如果您使用内核调试x64机器,则会获得BASE + Kernel-mode + x64

您在任何给定模式下所做的所有更改都会保存在最后重叠的工作区中。这意味着如果我们打开转储文件(因此我们是Base + Per转储),对设置的任何更改都将保存在此转储的工作空间中。

除了内置工作空间及其所有组合之外,还有命名(客户)工作空间。这些将是你去File>保存工作区,并提供一个名称以保存您在使用-W命令行参数启动Windbg时可以启用的所有设置。

回到你的问题。我怎样才能打开.cmdtree?在基础工作区中,您不能。许多窗口仅在调试器未处于休眠状态时(在其BASE工作空间中)才可用。一旦调试器进入任何活动状态,就可以使用这些窗口。

您遇到的问题是,为了按照您希望的方式设置所有内容,您必须让调试器处于活动状态(exe打开,转储打开,实时调试)以及何时去保存你的窗口布局,它也将保存你打开的,或转储,或你正在进行的实时调试。

你最好的办法就是做你刚才做的事情,就是在注册表中使用-c(HKEY_CLASSES_ROOT \ WinDbg.DumpFile.1 \ shell \ Open \ command)。这将允许您只需双击转储,并在每次进行转储分析时获取这些命令行选项。然后,您可以创建一个包含命令行的windbg快捷方式,这样这些设置将应用于您执行的其他类型的调试。

这是我在上面的regkey中的命令行:

“c:\ debuggers \ x64 \ windbg.exe”-z“%1”-Q -W Internal -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“

这是做什么的?

启动调试器,附加到转储文件,没有提示保存工作区设置,打开我的“内部”工作区(我创建的命名工作区),并运行这些命令来加载调试器扩展,设置首选项和创建别名我的生活更轻松。