本文主要講解 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函數,所以我們需要加一個斷點,如下:
注意,是 ffmpeg_g ,後面有個 _g 。 設置完斷點之後,再敲入一個命令 g,g 代表 go。代碼就會執行到 main 那裡停下來。如下: 【騰訊文檔】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,彙編代碼窗口。 下面我把一些窗口調出來看看效果,如下: 調試器的功能都是類似的,常用的功能無非就是 數據斷點,函數斷點,然後可以觀察變量之類的。
|
用WinDbg斷點調試FFmpeg
WinDbg 在 Windows 裡面的地位,就跟 GDB 在 Linux 的地位一樣。可以看到,WinDbg 會默認停在 ntdll 模塊 的 LdrpDoDebuggerBreak 函數,這是 WinDbg 的默認斷點,現在還沒有跑進去 ffmpeg.exe 的main函數,所以我們需要加一個斷點,如下:注意,是 ffmpeg_g ,後面有個 _g 。