我正在尝试在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]
答案 0 :(得分:1)
来自docs:
'start'命令相当于设置临时命令 断点在主程序的开头然后调用 'run'命令。
因此,当您设置断点时,您已经在main中。它永远不会再次到达,因为程序在main结束时退出。因此,断点永远不会触发。
我感觉你正试图在ffmpeg内部设置备用断点并调试更具体的东西,而且这也没有触发。你为什么不问那个问题呢?对它的解释可能非常不同,可能与内联有关。
答案 1 :(得分:1)
也许符号文件与可执行文件不同步。
gdb告诉你main()在3756行。在我的系统上,它告诉你它在第3753行(在“{”行)。也许有人编辑了源文件并编译了它但没有重新创建符号文件,从而使gdb在无法访问的地址设置断点。