@echo off
set imagename=InterfaceSvc.exe
//应用程序名
set pdbpath=E:\Files\System\Desktop\PDB
//设置pdb路径,方便打印出详细堆栈信息
setlocal enabledelayedexpansion
set currentdir=%~dp0
cd /d "E:\Files\System\Desktop\Tools\windbg两个版本\Debugging Tools for Windows (x64)"
gflags /i %imagename% +ust
set _NT_SYMBOL_PATH=%pdbpath%;
echo _NT_SYMBOL_PATH=%_NT_SYMBOL_PATH%
echo 打开应用程序,并运行一段时间,然后按任意键收集第一个内存日志《1.log》...
pause>nul
echo %date% %time% 程序状态:
tasklist /FI "IMAGENAME eq %imagename%"
set /P pid=输入应用程序的PID:
umdh -p:%pid% -f:"%currentdir%1.log"
echo 已生成第一个内存日志《%currentdir%1.log》
echo 继续运行应用程序,然后按B键收集第二个内存日志《2.log》...
:LoopTaskList
echo %date% %time% 程序状态:
tasklist /FI "PID eq %pid%"
choice /t 1 /n /c wb /d w>nul
if %errorlevel%==2 goto :LoopTaskListOut
set /a line=5*10+2
set "k="
for /l %%a in (1,1,%line%) do set "k=!k!"
2>nul echo !k!
goto :LoopTaskList
:LoopTaskListOut
umdh -p:%pid% -f:"%currentdir%2.log"
echo 已生成第二个内存日志《%currentdir%2.log》
echo 正在生成内存对比日志《12.log》...
umdh -d -v -l"%currentdir%1.log" "%currentdir%2.log" > "%currentdir%12.log"
start "" "%currentdir%12.log"
echo 已生成内存对比日志《%currentdir%12.log》,按任意键退出.
pause>nul
该方法是通过对比两次的内存开辟和释放来实现查找内存泄漏的,还挺好用的
使用方法:创建txt文件,更改文件后缀为.bat