我关注了Tess Ferrandez 的博客在 WinDbg 中设置自定义主题。
我还开始使用 -c ".cmdtree c:\mycmdtree.txt" 自动启动 WinDbg
这会正确地将我的 cmdtree 文件作为命令窗口打开,但我无法让它正确停靠。问题似乎是“命令”窗口只能在您打开 DMP 文件后打开,但打开 DMP 文件会使您退出“基本”工作区,因此不会保存对工作区的任何更改。
有任何想法吗?
我关注了Tess Ferrandez 的博客在 WinDbg 中设置自定义主题。
我还开始使用 -c ".cmdtree c:\mycmdtree.txt" 自动启动 WinDbg
这会正确地将我的 cmdtree 文件作为命令窗口打开,但我无法让它正确停靠。问题似乎是“命令”窗口只能在您打开 DMP 文件后打开,但打开 DMP 文件会使您退出“基本”工作区,因此不会保存对工作区的任何更改。
有任何想法吗?
这个简单的请求变得非常复杂。WinDbg 的窗口位置保存在工作区中。WinDbg 有几个默认工作区:
对于任何给定类型的调试(即实时用户模式或事后转储分析),您通常会得到基本+您的调试类型的设置组合。
如果你打开一个转储文件,你会得到 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"
这是做什么的?
启动调试器,附加到转储文件,不提示保存工作区设置,打开我的“内部”工作区(我创建的命名工作区),并运行这些命令来加载调试器扩展、设置首选项,并创建让我的生活更轻松的别名.
默认情况下,这对我来说可以停靠命令窗口: