請移步https://higoge.github.io/,所有下載資料在那個博客都能找到。謝謝。
--------------------------------------------------------------------
本着開源的精神,本着能讓大家更好的學習vlc,使用vlc,今天Jeremiah寫一篇重量級的博客,用GDB調試vlc。
很多人嘗試過用GDB調試vlc,但都失敗了,主要是官方博客給出的調試方法不好用,只能在winvlc.c文件中調試,不能調試其他文件。Jeremiah也是經過了很久的研究,終於在身邊一位高手的幫助下,實現了對vlc的調試。在此對身邊這個高手錶示感謝。
調試前提:
1) 對編譯vlc有所瞭解,最好是編譯成功過。由於用GDB調試vlc需要重新編譯vlc,所以必須對編譯vlc比較熟悉。本篇以vlc-1.0.5爲例。如不清楚如何編譯vlc的請參考《windows平臺下vlc編譯之十一:vlc-1.0.2的編譯》及Jeremiah自己錄製的編譯vlc視頻。
2) 對GDB有所瞭解,至少應該知道怎麼用。如果不知道,去Google吧,一堆堆的資料。
閒言少敘,進入正題。
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 -; \
fi
2. 修改myvlc.sh的CC和CXX變量,加入-g。
CC="gcc -mno-cygwin -g" CXX="g++ -mno-cygwin -g"
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進行單步調試。
祝各位清明節快樂。