在gdb sciprt中设置断点的问题

时间:2017-11-20 09:24:24

标签: debugging gdb breakpoints

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

var wind = new BaseWindow(uri);
win.YourEvent += (ss,ee) => wind.FirstRegister();
wind.show();

当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;

如果我手动复制并粘贴其他break命令 从脚本文件到gdb控制台, 一切正常

(gdb) clear api_solver.cpp:247
No breakpoint at api_solver.cpp:247.

脚本设置的断点源自 从一个源树(KLEE), 以及未设置的其他四个断点 来自另一个源树(Z3)。 这可能是某种PATH问题吗? 非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

  

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

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

在将二进制文件加载到GDB后尝试剪切/粘贴相同的命令,但是 beofre you run it 。机会是,GDB会说类似

No source file named rewriter_def.h.

您可以在设置断点之前将start添加到脚本中来解决此问题:如果相关的共享库是直接链接的,则会在程序到达main时加载它(这是start命令的作用。