【发布时间】:2010-05-18 19:00:27
【问题描述】:
我在 GDB 中跨步时遇到了一些问题。我已经从 ffmpeg 库中构建了一个示例程序,其中调试符号打开并剥离。尽管我将 ffmpeg 库配置为静态并明确禁用共享,但看起来我正在调试的程序正在动态链接,因为它的文件大小只有 99kB。我不知道这是问题,但想提一下。
在 av_seek_frame 中设置并命中断点后,我使用“下一步”命令跳过。但是,这会进入 av_seek_frame() 中的第一个函数,如下所示。此外,如果 a 执行第二个“下一步”,则回溯会丢失它所在的位置。我设置错了吗?我怎么能跨过去?我应该注意我仔细检查了'set step-mode off'是否默认关闭(因为我相信这会在没有调试信息的第一段代码处中断。)
Breakpoint 1, av_seek_frame (s=0x16429000, stream_index=0, timestamp=29727438, flags=0) at l
(gdb) list
1648
1649 return 0;
1650 }
1651
1652 int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int flags
1653 {
1654 int ret;
1655 AVStream *st;
1656
1657 ff_read_frame_flush(s);
(gdb) next
ff_read_frame_flush (s=0x16429000) at libavformat/utils.c:1248
(gdb) list
1243
1244 /**
1245 * Flush the frame reader.
1246 **/
1247 void ff_read_frame_flush(AVFormatContext *s)
1248 {
1249 AVStream *st;
1250 int i, j;
1251
1252 flush_packet_queue(s);
(gdb) next
ff_read_frame_flush (s=0x16429000) at libavformat/utils.c:1252
(gdb) where
#0 ff_read_frame_flush (s=0x16429000) at libavformat/utils.c:1252
#1 0x00000000 in ?? ()
【问题讨论】:
-
你是用
-fomit-frame-pointer构建的吗? -
我不这么认为,但这是可能的,因为我对基于 unix 风格配置的构建不太满意。我的配置选项(构建 ffmpeg 库和我正在调试的 ffplay 示例是:) ./configure --enable-libmp3lame --enable-static --enable-pthreads --enable-ffplay --disable-shared --禁用优化 --disable-mmx --disable-stripping --enable-debug
-
尝试检查
show step-mode- 我不使用 emacs,所以不确定它的默认值是什么。 -
你确定你的二进制文件和源代码是同步的吗?
-
就是这样,谢谢。我只使用'make'进行重建。做一个'make clean'然后'make'再次修复了一切。如果您想发布答案,我会接受。
标签: c debugging emacs gdb ffmpeg