用WinDbg斷點調試FFmpeg

才高八斗船帆ub 發佈 2022-12-08T11:29:01.909662+00:00

WinDbg 在 Windows 裡面的地位,就跟 GDB 在 Linux 的地位一樣。可以看到,WinDbg 會默認停在 ntdll 模塊 的 LdrpDoDebuggerBreak 函數,這是 WinDbg 的默認斷點,現在還沒有跑進去 ffmpeg.exe 的main函數,所以我們需要加一個斷點,如下:注意,是 ffmpeg_g ,後面有個 _g 。

本文主要講解 windbg 調試器的使用。WinDbg 在 Windows 裡面的地位,就跟 GDB 在 Linux 的地位一樣。可以通過 微軟的官方網站 下載 安裝 WinDbg。

WinDbg 是比較輕量級的調試工具,在一些場景下比較實用,例如不方便安裝 vs2019。

只要有 符號信息表(symbols) 跟 調試信息表(debug info),一樣能用 WinDbg 進行 源碼級調試 跟 各種斷點調試。這些信息,windows 是放在 pdb 文件裡面的,在源碼目錄,可以看到 ffmpeg_g.pdb 這個文件。

WinDbg 有 32 位跟64位,我們的 ffmpeg.exe 是 64 位的,所以選用 WinDbg 64位來調試。如下:

打開 windbg.exe ,界面如下:

然後點擊 菜單欄的 File → Open Executable,會彈出窗口,如下:

上圖中 設置了 Arguments 參數 跟工作目錄,參數如下:

Arguments :-i walking-dead.mp4 -c copy walking-dead.flv -y

Start directory:C:\msys64\home\loken\ffmpeg\build64\ffmepg-4.4-msvc

walking-dead.mp4 是本書經常用到的視頻素材,請下載保存好。

打開之後,界面如下:

這裡簡單講解一些 WinDbg 的界面,底部是命令輸入框,上圖中,我輸入了一個 k, 查看當前斷點的調用棧。

可以看到,WinDbg 會默認停在 ntdll 模塊 的 LdrpDoDebuggerBreak 函數,這是 WinDbg 的默認斷點,現在還沒有跑進去 ffmpeg.exe 的main函數,所以我們需要加一個斷點,如下:

# 設置斷點
bu ffmpeg_g!main
# 繼續執行
g

注意,是 ffmpeg_g ,後面有個 _g 。 設置完斷點之後,再敲入一個命令 g,g 代表 go。代碼就會執行到 main 那裡停下來。如下:

【騰訊文檔】FFmpegWebRTCRTMPRTSPHLSRTP播放器-音視頻流媒體高級開發-資料領取
FFmpegWebRTCRTMPRTSPHLSRTP鎾斁鍣�-闊寵棰戞祦濯掍綋楂樼駭寮€鍙�-璧勬枡棰嗗彇



現在講一下 WinDbg 常用的一些命令。

1,k :查看函數調用棧。

2,bu :根據符號進行斷點,例如 bu ffmpeg_g.exe!main ,前面要有模塊名,跟gdb 有點不一樣。

3,bl:查看所有斷點。

4,p:單步步進。

5,g:代碼繼續執行,go 的意思,快捷鍵 F5

WinDbg 還有更多的調試窗口可以調出來,這些窗口都在菜單欄的 View 裡面,這裡簡單介紹一下這些窗口。

1,Watch,觀察窗口。點擊可以添加自己想觀察的全局變量或者局部變量。

2,Locals,局部變量窗口,運行到某個函數,這個窗口就是顯示這個函數的局部變量信息。

3,Registers,寄存器窗口。

4,Memory,內存窗口。

5,Call Stack ,函數調用棧。

6,Disassembly,彙編代碼窗口。

下面我把一些窗口調出來看看效果,如下:

調試器的功能都是類似的,常用的功能無非就是 數據斷點,函數斷點,然後可以觀察變量之類的。

原文連結:https://blog.csdn.net/u012117034/article/details/125259367
關鍵字: