在 gdb 脚本中设置断点的问题
Problems with setting breakpoints in a gdb sciprt
我正在使用带有 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
gdb运行时,在第三个断点处停止,
但 不是 在其他断点中:
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)。
这可能是某种路径问题吗?
非常感谢任何帮助,谢谢!
If I manually copy and paste the other break commands from the script file to the gdb console, everything works fine:
最可能的原因:其他断点 "belong" 到尚未加载的共享库。
在将二进制文件加载到 GDB 后尝试 cut/pasting 相同的命令,但是 在你 运行 之前 。很有可能,GDB 会说类似
No source file named rewriter_def.h.
您可以通过在设置断点之前将 start
添加到您的脚本来解决此问题:如果有问题的共享库是直接链接的,它将在您的程序到达 main
时加载(这就是 start
命令的作用)。
我正在使用带有 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
gdb运行时,在第三个断点处停止, 但 不是 在其他断点中:
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)。 这可能是某种路径问题吗? 非常感谢任何帮助,谢谢!
If I manually copy and paste the other break commands from the script file to the gdb console, everything works fine:
最可能的原因:其他断点 "belong" 到尚未加载的共享库。
在将二进制文件加载到 GDB 后尝试 cut/pasting 相同的命令,但是 在你 运行 之前 。很有可能,GDB 会说类似
No source file named rewriter_def.h.
您可以通过在设置断点之前将 start
添加到您的脚本来解决此问题:如果有问题的共享库是直接链接的,它将在您的程序到达 main
时加载(这就是 start
命令的作用)。