我一定对堆栈或函数的调用方式有误解,我从 GDB 获得的回溯结果对我来说毫无意义。我试图找出程序中调用的位置,以便我可以添加我的组件。
该工具在视频上绘制边界框,我制作的是插值器。我认为只有在绘制框时打开 GDB 并在其中设置断点并运行回溯才有意义。这是 mu 输出(从 运行程序后ffmpeg.c main()
)
#0 draw_glyphs (vidatbox=0x10183d200, picref=0x10141e340, width=720, height=480,
rgbcolor=0x10183d284 "????", yuvcolor=0x10183d278 "뀀?\020???\020???????", x=0, y=0) at
libavfilter/vf_VidAT.c:627
#1 0x000000010001ce4c in draw_text (ctx=0x10120df20, picref=0x10141e340, width=720,
height=480) at libavfilter/vf_VidAT.c:787
draw_glyphs
忽略所有非 ascii 字符,这两个函数是如何draw_text
被调用的?为什么堆栈上没有其他内容?当我选择 Frame #1 并尝试 goup
时,它告诉我:
Initial frame selected; you cannot go up.
编辑:
我看了更多,当我问的时候,我更加困惑。该函数draw_glyphs
甚至没有在我正在运行的 main 内部调用。我已经浏览了所有用于编译的文件,而且……它没有在任何地方调用!
这是否意味着它是一个动态创建的函数指针或什么?如果是这样,那会使堆栈像我的那样不可访问吗?