windows平台下vlc编译之十二:用GDB调试vlc
2010-04-03 22:53
465 查看
请移步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进行单步调试。
祝各位清明节快乐。
本文出自 “海狗哥的流媒体空间” 博客,请务必保留此出处http://jeremiah.blog.51cto.com/539865/291032
本着开源的精神,本着能让大家更好的学习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进行单步调试。
祝各位清明节快乐。
本文出自 “海狗哥的流媒体空间” 博客,请务必保留此出处http://jeremiah.blog.51cto.com/539865/291032
相关文章推荐
- windows平台下vlc编译之十二:用GDB调试vlc
- Windows Embedded CE 6.0开发初体验(七)编译和调试平台
- Windows Embedded CE 6.0开发初体验(七)编译和调试平台 收藏
- windows 下构建 Eclipse gdb 调试平台调试arm程序
- windows平台下vlc编译之二:vlc-0.8.6i的编译(转自jeremiah的博客)
- windows平台下vlc编译之二:vlc-0.8.6i的编译
- FFMPEG在windows平台编译的详细过程,包括环境安装 分类: ffmpeg-SDL-VLC-Live555 2013-08-01 11:23 845人阅读 评论(0) 收藏
- windows平台下vlc编译之十:vlc-1.0.0的编译
- windows平台下vlc编译之六:vlc-0.9.8a的编译
- windows平台下vlc编译之六
- windows平台下vlc编译之九:vlc-1.0.0-rc*的编译
- 在windows下使用gcc+gdb编译和调试程序
- [学习博客]windows平台下vlc编译
- Windows平台下最新版VLC编译
- windows平台下vlc编译之七:vlc-1.0.0-git的编译
- windows平台下vlc编译之四:精简vlc
- Windows平台vlc-qt的编译和使用
- windows平台下vlc编译
- WINDOWS平台下VLC的编译