2

我在 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”加载的有用符号不多。

我尝试了符号表命令来加载特定的符号文件。它加载文件,我可以在中断提示中看到该功能。但是当我运行程序时,我收到了警告:

无法插入断点 1。

访问内存地址 0x2800 时出错:输入/输出错误。

有没有办法为 gdb 提供符号文件,以便我可以像在 linux 环境中一样调试它?

如果有人对我为什么这样做感兴趣,这里有一点背景。

我正在研究 VLC 代码库,了解它对 DXVA2 接口的包装。该项目非常庞大且复杂,其中包含许多试图模仿 C++ 继承和封装的函数指针,这使得它难以理解。

我的目的是单步调试 DXVA2 (Microsoft DirectX Video Acceleration 2) h264 路径上的 VLC 源代码,该路径仅在 windows 平台上运行。AFAIK vlc 没有可用于编译和调试的 IDE 项目文件。我选择交叉编译是因为 VLC 网站建议这样做,我想如果我能得到符号文件、源代码和可执行文件,我就可以调试它。

帮助将不胜感激。提前致谢。

4

1 回答 1

1

我找到了解决方案。

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

:)

于 2012-04-06T00:19:11.570 回答