スタック、または関数の呼び出し方法を誤解しているに違いありません。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
すべての非ASCII文字を無視して、2つの関数はどのようdraw_glyphs
にdraw_text
呼び出されていますか? スタックに他に何もないのはなぜですか?Frame #1 を選択して try and go を実行すると、次のようup
に表示されます。
Initial frame selected; you cannot go up.
編集:
私はもっと調べましたが、尋ねたときよりもさらに混乱しています。関数draw_glyphs
は、私が実行しているメインの内部でも呼び出されません。これがコンパイルに使用するすべてのファイルを調べましたが、まあ...どこにも呼び出されていません!
これは動的に作成された関数ポインタか何かということですか? もしそうなら、それは私のようにスタックにアクセスできないようにしますか?