我已关注 苔丝·费兰德斯的博客 用于在 WinDbg 中设置自定义主题。

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

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

有任何想法吗?

有帮助吗?

解决方案

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

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

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

如果您打开一个转储文件,如果您实时的用户模式调试,则获得每个转储文件的基本+,如果您实时内核调试X64机器,则获得base+用户模式

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

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

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

您遇到的问题是,为了按照您想要的方式设置所有内容,您必须让调试器处于活动状态(exe 打开、转储打开、实时调试),并且当您保存窗口布局时,它还会保存您打开、转储或实时调试的 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 !进程;aS !t !线程;aS .f .frame;aS dv dv /V /i /t;aS .f .框架"

这是做什么的?

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top