Debugging 在gdb sciprt中设置断点的问题

Debugging 在gdb sciprt中设置断点的问题,debugging,gdb,breakpoints,Debugging,Gdb,Breakpoints,我正在使用这个带有5个断点的gdb脚本: set pagination off break rewriter_def.h:679 break asserted_formulas.cpp:149 break Z3Solver.cpp:221 break api_solver.cpp:247 break smt_context.cpp:2950 run Breakpoint 1, klee::Z3SolverImpl::internalRunSolver ( ... ) at Z3Solver.

我正在使用这个带有5个断点的gdb脚本:

set pagination off
break rewriter_def.h:679
break asserted_formulas.cpp:149
break Z3Solver.cpp:221
break api_solver.cpp:247
break smt_context.cpp:2950
run
Breakpoint 1, klee::Z3SolverImpl::internalRunSolver ( ... ) at 
Z3Solver.cpp:221
221    int dave=0;
当gdb运行时,在第三个断点停止, 但在其他断点中,

set pagination off
break rewriter_def.h:679
break asserted_formulas.cpp:149
break Z3Solver.cpp:221
break api_solver.cpp:247
break smt_context.cpp:2950
run
Breakpoint 1, klee::Z3SolverImpl::internalRunSolver ( ... ) at 
Z3Solver.cpp:221
221    int dave=0;
我确保没有真正设置其他断点, 通过尝试从gdb控制台手动清除它们:

(gdb) clear api_solver.cpp:247
No breakpoint at api_solver.cpp:247.
如果我手动复制并粘贴其他打断命令 从脚本文件到gdb控制台, 一切正常

(gdb) break api_solver.cpp:247
Breakpoint 2 at 0x7ffff5afbb31: file ../src/api/api_solver.cpp, line 
247.
(gdb) cont
Continuing.

Breakpoint 2, Z3_solver_assert ( ... ) at ../src/api/api_solver.cpp:247
247    to_solver_ref(s)->assert_expr(to_expr(a));
由脚本设置的断点将启动 从一个源树(KLEE), 而其他四个未设置的断点 来自另一个源树(Z3)。 这可能是某种路径问题吗?? 非常感谢您的帮助,谢谢

如果我手动将脚本文件中的其他中断命令复制并粘贴到gdb控制台,则一切正常:

最可能的原因是:其他断点“属于”尚未加载的共享库

在将二进制文件加载到GDB中后,尝试剪切/粘贴相同的命令,但不要运行它。很可能,GDB会这样说

No source file named rewriter_def.h.
您可以通过在设置断点之前将
start
添加到脚本中来解决此问题:如果直接链接了相关的共享库,则将在程序到达
main
时加载它(这就是
start
命令的作用)