我已在具有管理员权限的命令提示符下将windbg安装为默认调试器。
然后,我编写了一个程序,该程序写入空指针,从而导致崩溃。
崩溃后,将弹出一个窗口,并显示“调试”或“程序关闭”选项。
因此,我选择了“调试”,并获得了与上载图像类似的窗口。
问:是否应该有windbg选项?
问:一定有我想念的东西。您可以建议我使用windbg进行故障排除吗?
最佳答案
正如肖恩·克莱恩(Sean Cline)在评论中所建议的那样,您可能尚未将WinDbg设置为验尸调试器。如果有的话,WinDbg会启动而不是vsjitdebugger.exe
。
确保您确实从提升的命令提示符下运行了windbg.exe -I
。您是否这样做并得到以下消息框?
编辑:请注意,在64位Windows上,有针对64位应用程序和WOW64(32位)应用程序的事后调试器的单独设置。每种版本的WinDbg收到-I
标志时,都会根据自己的位数设置为事后调试程序。也就是说,运行C:\WINDOWS\system32>"C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\windbg.exe" -I
将...\x64\windbg.exe
设置为64位应用程序的事后调试器,但将vsjitdebugger.exe
保留为WOW64应用程序的事后调试器。
您可以使用REG QUERY
命令检查当前配置。如果您运行windbg.exe -I
,那么您的输出应该是这样的:C:\Users\conio>reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug" /reg:64
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
UserDebuggerHotKey REG_DWORD 0x0
Debugger REG_SZ "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\windbg.exe" -p %ld -e %ld -g
Auto REG_SZ 1
但是,如果您只是安装了Visual Studio(并且未运行windbg.exe -I
),则可能类似于以下内容:C:\Users\conio>reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug" /reg:32
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
UserDebuggerHotKey REG_DWORD 0x0
Debugger REG_SZ "C:\WINDOWS\system32\vsjitdebugger.exe" -p %ld -e %ld
(无论运行的是/reg:64
还是/reg:32
,无论是否运行%WINDIR%\System32\REG.EXE
或%WINDIR%\SysWOW64\REG.EXE
,都分别需要ojit_code和ojit_code才能获得“64位注册表 View ”和“32位注册表 View ”。这显然仅适用于64位Windows。)
关于您的问题:“应该有选择权吗?”
不,看标题。它说“ Visual Studio 即时调试器”。在系统上安装的不同调试器中进行选择不是通用的实用程序。它只运行Visual Studio,但是可以选择启动新实例还是使用现有实例(我认为,如果您安装了多个版本,则可以选择VS版本)。
关于windows - 为什么我的windbg不在调试器列表中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35299446/