請移步https://higoge.github.io/,全部下載資料在那個博客都能找到。謝謝。 git
--------------------------------------------------------------------github
本着開源的精神,本着能讓你們更好的學習vlc,使用vlc,今天Jeremiah寫一篇重量級的博客,用GDB調試vlc。bootstrap
不少人嘗試過用GDB調試vlc,但都失敗了,主要是官方博客給出的調試方法很差用,只能在winvlc.c文件中調試,不能調試其餘文件。Jeremiah也是通過了好久的研究,終於在身邊一位高手的幫助下,實現了對vlc的調試。在此對身邊這個高手錶示感謝。windows
調試前提:
1) 對編譯vlc有所瞭解,最好是編譯成功過。因爲用GDB調試vlc須要從新編譯vlc,因此必須對編譯vlc比較熟悉。本篇以vlc-1.0.5爲例。如不清楚如何編譯vlc的請參考《windows平臺下vlc編譯之十一:vlc-1.0.2的編譯》及Jeremiah本身錄製的編譯vlc視頻。
2) 對GDB有所瞭解,至少應該知道怎麼用。若是不知道,去Google吧,一堆堆的資料。ide
閒言少敘,進入正題。函數
1. 執行./bootstrap以前,修改vlc-1.0.5的Makefile.am和Makefile.in文件,去掉如下內容:(直接刪除掉)學習
# Rebase all those DLLs to speed up loading (need cygwin rebase)
if rebase -b 0x42 /dev/null >/dev/null 2>&1; then \
find $(win32_destdir) -type f -name '*.dll' -print | rebase -b 0x70000000 -T -; \
fispa
2. 修改myvlc.sh的CC和CXX變量,加入-g。debug
CC="gcc -mno-cygwin -g" CXX="g++ -mno-cygwin -g"3d
3. 執行腳本,修改錯誤,執行make,這些都請參考之前博客。
4. make成功後不要執行make package-win32-base。而是執行如下命令。
make package-win32-base-debug
5. 如今就能夠調試了。
cd vlc-1.0.5
gdb vlc
顯示以下:
6. 設置斷點。
給vlc設置斷點其實讓Jeremiah頭暈了很長時間,但最後終於搞定了。先打印下看看。輸入l。
設置斷點能夠用b function_name的形式,但vlc裏面重名函數太多,因此此方法不太好用。
採用另外的方式,b fine_name:line_number的形式,vlc裏面重名的文件名是不多的,因此這樣的方法能夠頗有效的設置斷點。一開始設置會提示找不到,輸入y讓其記錄就好了。此處舉例設置avcodec.c的211行,OpenDecoder函數,即調試plugins/libavcodec_plugin.dll的代碼。
7. 執行程序,輸入視頻路徑地址。
run d:/video/01.avi
會執行到libvlc_new以後停住。
按c繼續執行後會在avcodec.c的OpenDecoder函數停住。
經過這樣的方式就能夠進行調試了,好比用s或n進行單步調試。
祝各位清明節快樂。