我在windows环境下使用gdb调试vlc.exe时遇到了一个问题。我按照http://wiki.videolan.org/Win32Compile上的说明,在linux下成功地编译和打包了VLC。
程序运行得很好,我也在项目文件夹中得到了符号表。但是,我不能让gdb加载必要的符号文件来设置断点等。
在vlc文件夹下,对象文件列在like下
./win32/*.o
并且可执行文件存储在
./win32/vlc-2.1.0-git/vlc.exe
Cygwin shell中的"gdb vlc.exe“加载的符号不多。
我尝试了symbol-table命令来加载特定的符号文件。它加载文件,我可以在break提示符中看到该函数。但是当我运行这个程序时,我得到了警告:
无法插入断点% 1。
访问内存地址0x2800时出错:输入/输出错误。
有没有办法把符号文件提供给gdb,这样我就可以像在linux环境中那样调试它?
如果有人对我为什么要这样做感兴趣,这里有一些背景知识。
我正在研究VLC代码库,了解它在DXVA2接口上的包装。这个项目相当庞大和复杂,有许多函数指针试图模仿C++继承和封装,这使得它很难理解。
我的目的是逐步通过DXVA2 (微软DirectX视频加速2) h264路径上的VLC源代码,该路径只能在windows平台上运行。AFAIK vlc没有可以用来编译和调试的IDE项目文件。我选择交叉编译是因为VLC网站推荐它,我想如果我能得到符号文件,源代码和可执行文件,我就可以调试它。
我们将非常感谢您的帮助。提前谢谢。
发布于 2012-04-06 08:19:12
我找到了解决方案。
gdb需要知道在哪里加载符号文件,这可以通过使用path函数或在path中添加符号文件位置来完成。
gdb还需要知道加载源文件的位置,这可以通过目录函数或指定程序何时启动来完成。
这就是我要做的:
在我的.bashrc文件中添加以下内容:
PATH=$PATH:[vlc proj folder]
export PATH然后启动gdb,如下所示:
gdb `find [vlc proj folder] -type d -printf '-d %p '` vlc.exe:)
https://stackoverflow.com/questions/10002398
复制相似问题