如何制作';。cmdtree';WinDbg中启动时的窗口停靠?

如何制作';。cmdtree';WinDbg中启动时的窗口停靠?,windbg,dmp,Windbg,Dmp,我遵循了在WinDbg中设置自定义主题的步骤 我还开始使用-c.cmdtree c:\mycmdtree.txt自动启动WinDbg 这将正确地将我的cmdtree文件作为命令窗口打开,但我无法使其正确对接。问题似乎是,只有在打开DMP文件后才能打开“命令”窗口,但打开DMP文件会将您从“基本”工作区切换出去,因此不会保存对工作区的任何更改 有什么想法吗?这个简单的请求变得非常复杂。WinDbg的窗口位置保存在工作区中。WinDbg有几个默认工作区: 基本-这是开始调试之前使用的工作区(没有打

我遵循了在WinDbg中设置自定义主题的步骤

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

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


有什么想法吗?

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

  • 基本-这是开始调试之前使用的工作区(没有打开转储,没有打开exe,没有附加到任何内容)
  • 每个转储文件-对于打开的每个转储,您都有一个用于此文件的工作区
  • 每个可执行文件-对于打开的每个可执行文件
  • 用户模式-在实时用户模式调试时使用
  • 内核模式-在内核模式调试时使用
  • 每台计算机体系结构—1台用于x64,1台用于x86,1台用于IA64
  • 远程-在远程调试时使用
对于任何给定类型的调试(即实时用户模式或事后转储分析),您通常会得到基本设置+您的调试类型的组合

如果打开一个转储文件,则每个转储文件将获得BASE+ 如果您使用实时用户模式调试,则会得到基本+用户模式 如果您对x64机器进行实时内核调试,则会得到BASE+kernelmode+x64

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

除了内置工作区及其所有组合之外,还有命名(客户)工作区。当您转到文件>保存工作区,并提供一个名称来保存所有设置时,您可以使用-W命令行参数在启动Windbg时启用这些设置

回到你的问题上来。如何打开.cmdtree?在基本工作区中,您不能。许多窗口仅在调试器未处于休眠状态(在其基本工作区中)时可用。一旦调试器进入任何活动状态,则这些窗口可用

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

您最好只做您已经在做的事情,也就是只在注册表中使用-c(HKEY_CLASSES\u ROOT\WinDbg.DumpFile.1\shell\Open\command)。这将允许您在每次执行转储分析时双击转储并获取这些命令行选项。然后,您可以创建windbg的快捷方式,该快捷方式还包含命令行,以便将这些设置应用于您执行的其他类型的调试

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

“c:\debuggers\x64\windbg.exe“-z”%1“-Q-W Internal-c”。加载winde.dll;。启用unicode 1;。忽略缺少的页面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/V/V/i/t;aS.f.frame”

这有什么用


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

您是否真的使用提供的答案设置了窗口停靠?我有两个问题:a)它停靠,但不是在我喜欢的位置;b)它总是停靠第二个窗口