WinDbg文件关联和资源管理器上下文菜单

Posted 活着的虫子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WinDbg文件关联和资源管理器上下文菜单相关的知识,希望对你有一定的参考价值。

很长一段时间以来,我有一个注册表文件来为WinDbg创建上下文菜单项。这些条目允许您选择x86或x64调试器。在公司内部,我有另一个版本的注册表文件,其中包含了私有符号服务器的另外两个上下文菜单项。你可以在这个截图中看到我在内部添加的所有4个选项。

 

注意,注册表文件假定WinDBG安装在c:\\调试器_x86和c:\\调试器中(分别用于x86和AMD64调试器)。

注册表项传入Microsoft公共符号服务器(http://msdl.Microsoft.com/download/symbols)和Microsoft专用符号服务器的符号路径。在这两种情况下,符号都通过SRV*链接在本地缓存(例如c:\\符号)。与体系结构条目非常相似,这种技术为您提供了一种在公共和私有符号之间切换的快速方法(在我的例子中)。符号路径的传递,而不是使用-NT_symbol_path环境变量,是绕过WinDBG所做的具体化的唯一方法。如果设置了环境变量,则该变量将位于传递的符号路径的前面。这意味着仍然可以使用环境变量路径而不是传递路径。我承认,这只是一个问题,为人们需要支持的两个符号商店和绝大多数人,环境变量是一个更好的方式去做。如果这样做,只需删除命令行的-y部分。

注册表文件为所有转储变量建立关联,包括反射转储文件(*.ini)。反射转储可以使用ProcDump和-r开关(例如ProcDump.exe-r-ma notepad.exe)进行。目前,我使用Visual Studio 2010键来获取图标,并且仍然支持通过Open条目在Visual Studio中打开转储(我不知道您为什么要这样做)。
我做的另一件事是加载常用的调试器扩展。在这个(示例)注册表文件中,我只是通过-a开关(为MSDN Magazine调试API系列创建的扩展名)包含了自己的一个扩展名(myext.dll)。如果要加载更多内容,只需在命令行中包含多个-a myext.dll条目。(另请注意,如果对cdb执行相同操作,则不能在-a和dll名称之间留有空格)。在我的个人版本中,我加载了六个扩展。
您可能需要考虑的一件事是添加-WX开关以忽略默认工作区。我亲自按照自己喜欢的方式设置默认工作区(命令窗口停靠、在主监视器上最大化WinDbg、为每个文本类型设置字体颜色等),并将其用作每个新调试会话的模板。因此,我不希望使用-WX开关(这是一个双负数),因为我希望应用工作区。但是,如果要始终使用“开箱即用”默认值,请添加-WX开关。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\\.dmp]
@="VisualStudio.dmp.10.0"

[HKEY_CLASSES_ROOT\\.hdmp]
@="VisualStudio.dmp.10.0"

[HKEY_CLASSES_ROOT\\.mdmp]
@="VisualStudio.dmp.10.0"

[HKEY_CLASSES_ROOT\\.kdmp]
@="VisualStudio.dmp.10.0"

[HKEY_CLASSES_ROOT\\.ini]
@="VisualStudio.dmp.10.0" 

[HKEY_CLASSES_ROOT\\VisualStudio.dmp.10.0\\shell]
@="WinDbg_x64_public"

[HKEY_CLASSES_ROOT\\VisualStudio.dmp.10.0\\shell\\WinDbg_x86_public]
@="Open with WinDbg x86 (Public)"

[HKEY_CLASSES_ROOT\\VisualStudio.dmp.10.0\\shell\\WinDbg_x86_public\\Command]
@="\\"C:\\\\Debuggers_x86\\\\windbg.exe\\" -z \\"%1\\" -a myext.dll -y \\"SRV*C:\\\\Symbols*http://msdl.microsoft.com/download/symbols\\\\

[HKEY_CLASSES_ROOT\\VisualStudio.dmp.10.0\\shell\\WinDbg_x64_public]
@="Open with WinDbg x64 (Public)"

[HKEY_CLASSES_ROOT\\VisualStudio.dmp.10.0\\shell\\WinDbg_x64_public\\Command]
@="\\"C:\\\\Debuggers\\\\windbg.exe\\" -z \\"%1\\" -a myext.dll -y \\"SRV*C:\\\\Symbols*http://msdl.microsoft.com/download/symbols\\\\

WinDbg Support

我一直都知道WinDbg有一个-I(这是一个大写的I)开关来设置它作为(自动)死后调试器。这跟Dr.Watson的脚步一样,他也有同样的选择。有趣的是,您可以在64位版本的Windows上执行两次此关联(在x86和x64调试器版本的WinDbg上运行-I)。通过设置两次,x64调试器用于x64故障(通过HKLM AeDebug密钥),x86调试器用于x86故障(通过HKLM WOW64 AeDebug密钥)。(对于那些与体系结构无关的扩展问题很方便。)

  • HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug
  • HKEY_LOCAL_MACHINE\\Software\\Wow6432Node\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug

注意,没有内置方法将-I设置还原为WER默认值。
今天,我发现WinDbg也可以做文件关联!WinDbg.exe支持-IA开关来注册文件关联。在WinDbg命令行主题的Debugger.chm文件中列出了-I和-I a选项;但是对-IA的描述有点简短。

为了弄清-IA实际做了什么,我用ProcMon记录了它的执行过程。从c:\\调试器 提升WinDbg.exe-IA运行将生成以下屏幕截图和ProcMon日志文件(已应用了大量筛选)。

 

8:21:12.7253212 PM windbg.exe 7140 RegOpenKey HKCR\\.dmp SUCCESS Desired Access: Read, Maximum Allowed
8:21:12.7254430 PM windbg.exe 7140 RegCreateKey HKCR\\.dmp SUCCESS Desired Access: All Access
8:21:12.7255690 PM windbg.exe 7140 RegQueryKey HKCR\\.dmp SUCCESS Query: Name
8:21:12.7256082 PM windbg.exe 7140 RegQueryKey HKCR\\.dmp SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7257391 PM windbg.exe 7140 RegSetValue HKCR\\.dmp\\(Default) SUCCESS Type: REG_SZ, Length: 36, Data: WinDbg.DumpFile.1
8:21:12.7265370 PM windbg.exe 7140 RegOpenKey HKCR\\.hdmp SUCCESS Desired Access: Read, Maximum Allowed
8:21:12.7266420 PM windbg.exe 7140 RegCreateKey HKCR\\.hdmp SUCCESS Desired Access: All Access
8:21:12.7275875 PM windbg.exe 7140 RegQueryKey HKCR\\.hdmp SUCCESS Query: Name
8:21:12.7276288 PM windbg.exe 7140 RegQueryKey HKCR\\.hdmp SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7277548 PM windbg.exe 7140 RegSetValue HKCR\\.hdmp\\(Default) SUCCESS Type: REG_SZ, Length: 36, Data: WinDbg.DumpFile.1
8:21:12.7282217 PM windbg.exe 7140 RegOpenKey HKCR\\.mdmp SUCCESS Desired Access: Read, Maximum Allowed
8:21:12.7283812 PM windbg.exe 7140 RegCreateKey HKCR\\.mdmp SUCCESS Desired Access: All Access
8:21:12.7284834 PM windbg.exe 7140 RegQueryKey HKCR\\.mdmp SUCCESS Query: Name
8:21:12.7285233 PM windbg.exe 7140 RegQueryKey HKCR\\.mdmp SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7286521 PM windbg.exe 7140 RegSetValue HKCR\\.mdmp\\(Default) SUCCESS Type: REG_SZ, Length: 36, Data: WinDbg.DumpFile.1
8:21:12.7291973 PM windbg.exe 7140 RegCreateKey HKCR\\.kdmp SUCCESS Desired Access: All Access
8:21:12.7307581 PM windbg.exe 7140 RegQueryKey HKCR\\.kdmp SUCCESS Query: Name
8:21:12.7307980 PM windbg.exe 7140 RegQueryKey HKCR\\.kdmp SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7309261 PM windbg.exe 7140 RegSetValue HKCR\\.kdmp\\(Default) SUCCESS Type: REG_SZ, Length: 36, Data: WinDbg.DumpFile.1
8:21:12.7332358 PM windbg.exe 7140 RegCreateKey HKCR\\WinDbg.DumpFile.1 SUCCESS Desired Access: All Access
8:21:12.7349016 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.DumpFile.1 SUCCESS Query: Name
8:21:12.7349436 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.DumpFile.1 SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7350913 PM windbg.exe 7140 RegSetValue HKCR\\WinDbg.DumpFile.1\\(Default) SUCCESS Type: REG_SZ, Length: 58, Data: WinDbg Post-Mortem Dump File
8:21:12.7373303 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.DumpFile.1 SUCCESS Query: Name
8:21:12.7373793 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.DumpFile.1 SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7377440 PM windbg.exe 7140 RegCreateKey HKCR\\WinDbg.DumpFile.1\\DefaultIcon SUCCESS Desired Access: All Access
8:21:12.7388456 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.DumpFile.1\\DefaultIcon SUCCESS Query: Name
8:21:12.7388848 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.DumpFile.1\\DefaultIcon SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7390150 PM windbg.exe 7140 RegSetValue HKCR\\WinDbg.DumpFile.1\\DefaultIcon\\(Default) SUCCESS Type: REG_SZ, Length: 64, Data: "C:\\debuggers\\windbg.exe",-3002
8:21:12.7467553 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.DumpFile.1 SUCCESS Query: Name
8:21:12.7474203 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.DumpFile.1 SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7477828 PM windbg.exe 7140 RegCreateKey HKCR\\WinDbg.DumpFile.1\\shell SUCCESS Desired Access: All Access
8:21:12.7511046 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.DumpFile.1\\shell SUCCESS Query: Name
8:21:12.7511515 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.DumpFile.1\\shell SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7513244 PM windbg.exe 7140 RegSetValue HKCR\\WinDbg.DumpFile.1\\shell\\(Default) SUCCESS Type: REG_SZ, Length: 10, Data: Open
8:21:12.7540113 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.DumpFile.1\\shell SUCCESS Query: Name
8:21:12.7540540 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.DumpFile.1\\shell SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7544075 PM windbg.exe 7140 RegCreateKey HKCR\\WinDbg.DumpFile.1\\shell\\Open SUCCESS Desired Access: All Access
8:21:12.7556393 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.DumpFile.1\\shell\\Open SUCCESS Query: Name
8:21:12.7556785 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.DumpFile.1\\shell\\Open SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7558143 PM windbg.exe 7140 RegSetValue HKCR\\WinDbg.DumpFile.1\\shell\\Open\\(Default) SUCCESS Type: REG_SZ, Length: 12, Data: &Open
8:21:12.7576306 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.DumpFile.1\\shell\\Open SUCCESS Query: Name
8:21:12.7576775 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.DumpFile.1\\shell\\Open SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7580456 PM windbg.exe 7140 RegCreateKey HKCR\\WinDbg.DumpFile.1\\shell\\Open\\command SUCCESS Desired Access: All Access
8:21:12.7592768 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.DumpFile.1\\shell\\Open\\command SUCCESS Query: Name
8:21:12.7593167 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.DumpFile.1\\shell\\Open\\command SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7594629 PM windbg.exe 7140 RegSetValue HKCR\\WinDbg.DumpFile.1\\shell\\Open\\command\\(Default) SUCCESS Type: REG_SZ, Length: 68, Data: "C:\\debuggers\\windbg.exe" -z "%1"
8:21:12.7630360 PM windbg.exe 7140 RegCreateKey HKCR\\.wew SUCCESS Desired Access: All Access
8:21:12.7641811 PM windbg.exe 7140 RegQueryKey HKCR\\.wew SUCCESS Query: Name
8:21:12.7642168 PM windbg.exe 7140 RegQueryKey HKCR\\.wew SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7644407 PM windbg.exe 7140 RegSetValue HKCR\\.wew\\(Default) SUCCESS Type: REG_SZ, Length: 38, Data: WinDbg.Workspace.1
8:21:12.7677107 PM windbg.exe 7140 RegCreateKey HKCR\\WinDbg.Workspace.1 SUCCESS Desired Access: All Access
8:21:12.7688110 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.Workspace.1 SUCCESS Query: Name
8:21:12.7688488 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.Workspace.1 SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7690853 PM windbg.exe 7140 RegSetValue HKCR\\WinDbg.Workspace.1\\(Default) SUCCESS Type: REG_SZ, Length: 44, Data: WinDbg Workspace File
8:21:12.7708855 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.Workspace.1 SUCCESS Query: Name
8:21:12.7709275 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.Workspace.1 SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7712446 PM windbg.exe 7140 RegCreateKey HKCR\\WinDbg.Workspace.1\\DefaultIcon SUCCESS Desired Access: All Access
8:21:12.7722720 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.Workspace.1\\DefaultIcon SUCCESS Query: Name
8:21:12.7723098 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.Workspace.1\\DefaultIcon SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7724169 PM windbg.exe 7140 RegSetValue HKCR\\WinDbg.Workspace.1\\DefaultIcon\\(Default) SUCCESS Type: REG_SZ, Length: 64, Data: "C:\\debuggers\\windbg.exe",-3002
8:21:12.7742535 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.Workspace.1 SUCCESS Query: Name
8:21:12.7742990 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.Workspace.1 SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7746364 PM windbg.exe 7140 RegCreateKey HKCR\\WinDbg.Workspace.1\\shell SUCCESS Desired Access: All Access
8:21:12.7784159 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.Workspace.1\\shell SUCCESS Query: Name
8:21:12.7784565 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.Workspace.1\\shell SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7785895 PM windbg.exe 7140 RegSetValue HKCR\\WinDbg.Workspace.1\\shell\\(Default) SUCCESS Type: REG_SZ, Length: 10, Data: Open
8:21:12.7806080 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.Workspace.1\\shell SUCCESS Query: Name
8:21:12.7806528 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.Workspace.1\\shell SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7809825 PM windbg.exe 7140 RegCreateKey HKCR\\WinDbg.Workspace.1\\shell\\Open SUCCESS Desired Access: All Access
8:21:12.7821576 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.Workspace.1\\shell\\Open SUCCESS Query: Name
8:21:12.7821933 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.Workspace.1\\shell\\Open SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7823025 PM windbg.exe 7140 RegSetValue HKCR\\WinDbg.Workspace.1\\shell\\Open\\(Default) SUCCESS Type: REG_SZ, Length: 12, Data: &Open
8:21:12.7840075 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.Workspace.1\\shell\\Open SUCCESS Query: Name
8:21:12.7840460 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.Workspace.1\\shell\\Open SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7856271 PM windbg.exe 7140 RegCreateKey HKCR\\WinDbg.Workspace.1\\shell\\Open\\command SUCCESS Desired Access: All Access
8:21:12.7869639 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.Workspace.1\\shell\\Open\\command SUCCESS Query: Name
8:21:12.7870052 PM windbg.exe 7140 RegQueryKey HKCR\\WinDbg.Workspace.1\\shell\\Open\\command SUCCESS Query: HandleTags, HandleTags: 0x0
8:21:12.7871508 PM windbg.exe 7140 RegSetValue HKCR\\WinDbg.Workspace.1\\shell\\Open\\command\\(Default) SUCCESS Type: REG_SZ, Length: 70, Data: "C:\\debuggers\\windbg.exe" -WF "%1"

使用与我的regsitry文件相同的技术注册的上下文菜单-它在HKCR配置单元中使用shell命令。转储关联不如我的注册表文件有用,因为只支持一个调试器,并且它跳过*.ini文件,但是它确实关联了工作区文件。我个人从来没有开过工作间,但如果你开过,这可能是件好事。

那么从现在起我将在我的系统上做什么呢?我将在我的x64调试器上运行WinDbg.exe-IA,然后在x64和x86调试器上运行WinDbg.exe-I,然后运行注册表脚本,以便在加载转储的方式上提供更大的灵活性(和文件类型支持)。顺便说一句,如果这样做之后你发现你没有得到上下文菜单,那么很可能你的HKCU配置单元中有一个“Open With…”文件关联。找到.dmp密钥并将其删除以还原为全局HKCR配置。
注意,如果您无意调试AeDebug转储,那么最好将WER作为后期调试器(即不运行-i)并将问题发送给Microsoft进行分析。这是解决问题的最好办法。

以上是关于WinDbg文件关联和资源管理器上下文菜单的主要内容,如果未能解决你的问题,请参考以下文章

使用Windbg时遇到的几个典型问题说明

片段 XXX 未与片段管理器关联

片段未与片段管理器关联。 (对话片段)

从Visual Studio代码源代码控制窗格上下文菜单中提供“打开文件”命令

VS解决方案文件的Windows资源管理器上下文菜单中的“构建”项?

集成到 Windows 资源管理器上下文菜单中