gdb不会停在甚至是琐碎的断点上

时间:2015-11-14 21:34:26

标签: ffmpeg gdb mingw

我正在尝试在Windows 7 64bit上ffplay上使用mingw-w64编译msys2(调试版本)。我尝试使用gdb设置断点,它们似乎设置得很好,但程序不会停止。所以我尝试发布start,但它并没有停止。我尝试在main手动设置断点,但它仍然没有停止。我确认找到main,确实如此。这是会议的一部分。可能导致这种情况的任何解释?

(gdb) start
Temporary breakpoint 1 at 0x140013f7c: file C:/Users/bubaruch/Documents/projects/ffmpeg/ffmpeg/ffplay.c, line 3756.
Starting program: C:\Users\bubaruch\Documents\projects\ffmpeg\b2\ffplay_g.exe
[New Thread 7752.0x275c]
ffplay version 2.8.git Copyright (c) 2003-2015 the FFmpeg developers
  built with gcc 5.2.0 (Rev4, Built by MSYS2 project)
  configuration: --disable-doc --disable-optimizations
  libavutil      55.  5.100 / 55.  5.100
  libavcodec     57. 15.100 / 57. 15.100
  libavformat    57. 14.100 / 57. 14.100
  libavdevice    57.  0.100 / 57.  0.100
  libavfilter     6. 15.100 /  6. 15.100
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.101 /  2.  0.101
Simple media player
usage: ffplay [options] input_file

An input file must be specified
Use -h to get full help or, even better, run 'man ffplay'
[Inferior 1 (process 7752) exited with code 01]

(gdb) l main
3748       return 1;
3749    }
3750
3751    /* Called from the main */
3752    int main(int argc, char **argv)
3753    {
3754        int flags;
3755        VideoState *is;
3756        char dummy_videodriver[] = "SDL_VIDEODRIVER=dummy";
3757

(gdb) b main
Breakpoint 2 at 0x140013f7c: file C:/Users/bubaruch/Documents/projects/ffmpeg/ffmpeg/ffplay.c, line 3756.

(gdb) r
Starting program: C:\Users\bubaruch\Documents\projects\ffmpeg\b2\ffplay_g.exe
[New Thread 15388.0x3278]
ffplay version 2.8.git Copyright (c) 2003-2015 the FFmpeg developers
  built with gcc 5.2.0 (Rev4, Built by MSYS2 project)
  configuration: --disable-doc --disable-optimizations
  libavutil      55.  5.100 / 55.  5.100
  libavcodec     57. 15.100 / 57. 15.100
  libavformat    57. 14.100 / 57. 14.100
  libavdevice    57.  0.100 / 57.  0.100
  libavfilter     6. 15.100 /  6. 15.100
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.101 /  2.  0.101
Simple media player
usage: ffplay [options] input_file

An input file must be specified
Use -h to get full help or, even better, run 'man ffplay'
[Inferior 1 (process 15388) exited with code 01]

2 个答案:

答案 0 :(得分:1)

来自docs

  

'start'命令相当于设置临时命令   断点在主程序的开头然后调用   'run'命令。

因此,当您设置断点时,您已经在main中。它永远不会再次到达,因为程序在main结束时退出。因此,断点永远不会触发。

我感觉你正试图在ffmpeg内部设置备用断点并调试更具体的东西,而且这也没有触发。你为什么不问那个问题呢?对它的解释可能非常不同,可能与内联有关。

答案 1 :(得分:1)

也许符号文件与可执行文件不同步。

gdb告诉你main()在3756行。在我的系统上,它告诉你它在第3753行(在“{”行)。也许有人编辑了源文件并编译了它但没有重新创建符号文件,从而使gdb在无法访问的地址设置断点。