obsidian/笔记文件/2.笔记/windbg崩溃检测.md
2025-03-26 00:02:56 +08:00

3.2 KiB
Raw Permalink Blame History

#unity/日常积累

注意unity的编译选项需要是IL2CPP 这种 C++ 的编译选项

!Pasted image 20240718092243.png

安装好windows对应的sdk后一般都会集成windbg调试工具关键字检索打开即可

!Pasted image 20240718092045.png

首先打开对应的崩溃Dump文件

!Pasted image 20240718091525.png

然后在命令行中添加pdb符号表路径参考

.sympath+ G:\code\unity\testCrash\exe

该指令是会添加对应路径下所有的pdb符号表文件

!Pasted image 20240718091842.png

如果顺利加载以下路径会显示为OK

!Pasted image 20240718092518.png

然后再执行以下指令,就可以定位到,具体的崩溃位置了

 .ecxr;kv

!Pasted image 20240718092132.png

对应测试脚本:

!Pasted image 20240718092149.png

如果解析不出来,可以尝试重载指令

.reload

!Pasted image 20240718092358.png

如果要命令行执行windbg可以使用它的脚本模式 不同参数,分别对应不同的文件和路径,举例说明:

-z 对应的是崩溃dmp文件所在的路径 -y 对应的是,符号表所在路径,如果有多个符号表路径,可以使用 ; 进行隔开,如果路径包含空格,则需要使用引号,引起来; -logo 对应的是dmp解析后输出的文件路径如果文件已存在会覆盖

-c 对应的是windbg启动之后执行的相关指令可以是指令也可以是文本文件其中包含多条指令如果只是执行相关指令它们之间需要使用 ; 进行隔开;

需要先 cd 跳转到windbg.exe所在的文件夹再打开命令行执行以下指令

!Pasted image 20240718224217.png

这里测试的是输出崩溃文件到D盘的qiuqiuCrash.txt文件如果不存在这个文件也会自动创建

 .\windbg.exe -z C:\Users\youro\AppData\Local\Temp\DefaultCompany\testCrash\Crashes\Crash_2024-07-18_011105947\crash.dmp -y G:\code\unity\testCrash\exe -logo D:\qiuqiuCrash.txt -c " .ecxr;kv"

可以看到记录的log也是正常的

!Pasted image 20240718224402.png

也可以新建.txt脚本文件用来存储对应脚本

!Pasted image 20240718225129.png

测试脚本,其中 qq 是运行完成后退出windbg程序即可

.echo ==============start=============
.ecxr
kv
.echo ==============end=============
qq

命令行调用的时候,记得添加 "$< 前缀然后跟随txt脚本所在的路径即可参考windbg命令行脚本

 .\windbg.exe -z C:\Users\youro\AppData\Local\Temp\DefaultCompany\testCrash\Crashes\Crash_2024-07-18_011105947\crash.dmp -y G:\code\unity\testCrash\exe -logo D:\qiuqiuCrash.txt -c "$<D:\TestWindbgScript.txt"

这里脚本存放的位置也是D盘

!Pasted image 20240718225405.png

自动运行脚本后windbg也是自动退出log文件也提示重新加载了

!Pasted image 20240718225443.png

报错的log信息也还是正常的

!Pasted image 20240718225515.png

参考链接:

https://cloud.tencent.com/developer/article/2408909

https://learn.microsoft.com/zh-cn/windows-hardware/drivers/debuggercmds/windbg-command-line-preview