在使用 GDB 调试程序时,若在 main 函数设置断点后程序未停止,可能由以下原因导致:
-g 选项,导致 GDB 无法定位符号(如 main)。 gcc -g your_program.c -o your_program验证是否包含调试信息:
objdump --syms your_program | grep debugmain 函数_start 或 __libc_start_main(由 C 运行时库处理),直接断点 main 可能无效。(gdb) break _start
(gdb) runmain 函数内部第一行代码设断点:(gdb) break file.c:line_number # 替换为 main 内的实际行号-O1/-O2)可能导致代码重排或内联,使 main 不可中断。 gcc -g -O0 your_program.c -o your_programmain 即终止)。 (gdb) break main # 设置断点
(gdb) run # 启动程序(非 continue)start 命令(自动在 main 暂停): (gdb) start(gdb) info filebreak *0x400000)。lldb)。file your_program # 查看是否包含 "with debug_info"(gdb) info functions main # 确认 main 存在(gdb) break _start
(gdb) run(gdb) catch syscall exit # 拦截退出事件
(gdb) run通过以上方法定位问题后,针对性解决即可恢复断点功能。若仍失败,请提供以下信息:
gdb -batch -ex "break main" -ex "run" ./your_program)
举报
更多回帖