5

我关注了Tess Ferrandez 的博客在 WinDbg 中设置自定义主题。

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

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

有任何想法吗?

4

2 回答 2

7

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

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

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

如果你打开一个转储文件,你会得到 BASE+Per dump file 如果你进行用户模式调试,你会得到 BASE+用户模式 ​​如果你在 x64 机器上进行内核调试,你会得到 BASE+Kernel-mode+x64

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

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

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

您遇到的问题是,为了按照您想要的方式进行所有设置,您必须让调试器处于活动状态(打开 exe,打开转储,实时调试)并且当您保存窗口布局时,它还将保存您打开、转储或正在进行的实时调试的 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"

这是做什么的?

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

于 2010-04-28T13:18:58.527 回答
0

默认情况下,这对我来说可以停靠命令窗口:

  1. 打开WinDbg。不要打开转储文件。只需打开应用程序。
  2. 单击菜单查看 - 命令
  3. 单击菜单窗口 - 全部停靠
  4. 单击菜单文件 - 保存工作区
于 2022-01-05T17:35:44.227 回答