备注:1.windbg启动进程以后,会自动中断在ntdll!LdrpDoDebuggerBreak函数2.windbg v7.0~10.0版本是在windows sdk中,需要这个版本需要下载windows sdk,然后安装它。(里面还包含gflags.exe,umdh.exe调试工具,安装完路径:C:\Program Files (x86)\Windows Kits\10\Debuggers\x64)3.windbg preview版本是目前最新版本,需要通过Microsoft Store应用商店安装,因此需要win10最新版或者win11系统支持才行调试命令:1.查看调用堆栈:kn/kv/kp2.切换到发生异常的线程上下文:.ecxr (有时需要执行这个命令,才能在崩溃线程上看到正常的调用堆栈) 查看具体异常的代码:.exr -1 显示信息如下: ExceptionAddress:ExceptionAddress: 00007ffd1f951470 (VCRUNTIME140!memcpy+0x180 崩溃发生的位置 ExceptionCode: c0000005 (Access violation) 这是一个访问冲突(内存违规) ExceptionFlags: 00000000 这是第一次机会异常。如果是 1 则是第二次机会异常 NumberParameters: 2 异常附带参数。对于访问冲突(c0000005),Windows 总是附带 2 个参数(前一个是操作类型,后一个是非法地址) Parameter[0]: 0000000000000000 0 代表“读操作”(Read)。如果是写操作,这里会是 1 Parameter[1]: 000001a6803c0160 这是导致崩溃的具体内存地址。CPU 尝试去读这个地址,但是失败了 Attempt to read from address 000001a6803c0160 Windbg 帮你翻译好的中文提示:“尝试从地址 000001a6803c0160 读取数据时发生了崩溃”3.显示所有模块信息及符号加载情况:lm 查看模块的详细符号信息:lm vm 模块名 如:lm vm VideoPlayerCore (这里不能有后缀名) 如:lm vm VideoPlayer* 检查符号匹配情况:!lmi 模块名4.重新加载符号文件:.reload 强制重新加载(即使已加载):.reload /f 重新加载特定模块:.reload /f 模块名 如:.reload /f MyApp.exe (这里必须加上后缀名) 显示/设置符号路径:.sympath 将某个符号路径加载到已有的符号路径后面:.sympath+ new path 设置缓存符号文件路径和微软服务器符号文件路径:.sympath SRV*C:\symbols*https://msdl.microsoft.com/download/symbols 启用符号加载的详细日志:!sym noisy5