我正在使用带有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问题吗? 非常感谢任何帮助,谢谢!
答案 0 :(得分:1)
如果我手动将其他break命令从脚本文件复制并粘贴到gdb控制台,一切正常:
最可能的原因:其他断点“属于”尚未加载的共享库。
在将二进制文件加载到GDB后尝试剪切/粘贴相同的命令,但是 beofre you run it 。机会是,GDB会说类似
No source file named rewriter_def.h.
您可以在设置断点之前将start
添加到脚本中来解决此问题:如果相关的共享库是直接链接的,则会在程序到达main
时加载它(这是start
命令的作用。