作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 GDB 中跨步时遇到了一些麻烦。我已经从 ffmpeg 库构建了一个示例程序,其中调试符号打开并剥离。虽然我将 ffmpeg 库配置为静态并明确禁用共享,但看起来我正在调试的程序是动态链接的,因为它的文件大小只有 99kB。我不知道这是问题,但想提一下。
在 av_seek_frame 中设置并命中断点后,我使用“next”命令跳过。但是,这会进入 av_seek_frame() 中的第一个函数,如下所示。此外,如果执行第二个“下一步”,则回溯会丢失它所在的位置。我设置错了吗?我怎么能跨过去?我应该注意我仔细检查了'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 ?? ()
最佳答案
如果您不确定您的二进制文件是否是静态链接的,您可以使用 ldd 检查它并看到如下消息:
% ldd ffmpeg
not a dynamic executable
step
和
next
命令。您不需要使用 --disable-stripping 因为在 gdb 中您可以使用 ffmpeg_g 二进制文件(或者如果您碰巧运行 ffmpeg 二进制文件,您可以使用
file ffmpeg_g
从中加载符号)。
value optimized out
检查变量时,但严格来说,您不需要使用该选项来获得 emacs/gdb 的行为......当使用优化时,我没有问题单步执行代码。
gud-break
命令仅使用文件名的基本部分来设置断点,而不是绝对路径,这在 ffmpeg 的情况下意味着,例如,如果您在 utils.c 中设置断点,它可能无法正常工作,具体取决于值您在 gdb 中设置的源代码搜索路径,因为 ffmpeg 在不同的路径中有多个名为 utils.c 的文件(实际上,总共有 5 个 utils.c 文件,每个 lib* 子目录中都有一个)。默认情况下,搜索路径设置为 $cdir:$cwd,但如果您将其设置为/path/to/ffmpeg:$cdir:$cwd 之类的内容,并且您尝试在 libavformat 的 utils.c 中设置断点,它可能会在 libavutil 中找到那个——在这种情况下,如果你很幸运,它会提示你想要设置断点的行不存在(因为 libavutil 中的那个更短),或者它可能会在您想要的行,但在错误的 utils.c 中。
关于c - 跨过 Emacs GDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2860197/
我在 GDB 中跨步时遇到了一些麻烦。我已经从 ffmpeg 库构建了一个示例程序,其中调试符号打开并剥离。虽然我将 ffmpeg 库配置为静态并明确禁用共享,但看起来我正在调试的程序是动态链接的,因
在 Python 调试器 (pdb) 中时,我想跳过 yield 语句,但点击 (n) 进行下一步会将我带到 yield 的目的地,即生成器的使用者。我想转到生成器中执行的下一行。有什么办法吗? 我正
我是一名优秀的程序员,十分优秀!