我已在命令提示符下以管理员权限将windbg安装为默认调试器。
然后我编写了一个写入空指针的程序,以便导致崩溃。
崩溃后,会弹出一个窗口并显示" debug"或"节目关闭"选项。
所以我选择了" debug",得到了像我上传的图片一样的窗口。
Q值。难道不存在windbg选项吗? 问:我必须要错过一些东西。你能建议我用windbg进行故障排除吗?
答案 0 :(得分:2)
正如Sean Cline在评论中所说,你可能没有将WinDbg设置为事后调试器。如果你有,WinDbg将启动而不是vsjitdebugger.exe
。
确保您确实从提升的命令提示符运行windbg.exe -I
。你这样做了,并得到以下消息框?
编辑:请注意,在64位Windows上,有针对64位应用程序和WOW64(32位)应用程序的事后调试程序的单独设置。收到-I
标志时,每个版本的WinDbg都将自己设置为事后调试器以获得自己的位数。也就是说,运行
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
分别需要获得" 64位注册表视图"以及" 32位注册表视图"无论是什么您是否正在运行%WINDIR%\System32\REG.EXE
或%WINDIR%\SysWOW64\REG.EXE
。这显然只适用于64位Windows。)
关于你的问题:" 不应该选择windbg吗?"
没有。看看标题。它说" Visual Studio 即时调试器"。在系统上安装的不同调试器中,选择它不是一般工具。它只运行Visual Studio,但可以选择是启动新实例还是使用现有实例(如果安装了多个版本,我认为它允许您选择VS版本)。