我想调试程序,但我不希望GDB打印它从本地源文件范围访问的代码。选项 步骤 (进入每次通话)和 下一步 (即使在相同的来源中也会跳过这些功能)文件)在这种情况下没用。
同样的任何一点?
由于
答案 0 :(得分:1)
你可以看到我对 Does GDB have a “step-to-next-call” instruction? 的回答:没有原生的GDB命令(据我所知,他们可能已经开发过了),但在Python中很容易做到:
import gdb
class StepNoLibrary (gdb.Command):
def __init__ (self):
super (StepNoLibrary, self).__init__ ("step-no-library",
gdb.COMMAND_OBSCURE)
def invoke (self, arg, from_tty):
step_msg = gdb.execute("step", to_string=True)
fname = gdb.newest_frame().function().symtab.objfile.filename
if fname.startswith("/usr"):
# inside a library
SILENT=False
gdb.execute("finish", to_string=SILENT)
else:
# inside the application
print(step_msg[:-1])
StepNoLibrary()
将它放在一个文件中,用GDB(或你的.gdbinit)来源它,这将为你提供新命令step-no-library
。
很容易阅读它的功能,前进一个step
,如果步骤最终存储在/usr/*
中存储的文件中,则finish
将其返回到申请。
当然,这是一个天真的实现,如果你的要求与编辑功能代码不同!
答案 1 :(得分:0)
也许尝试使用DDD(数据显示调试器)。提醒很多关于gdb
输入:
ddd --gdb
然后
g++ -O0 -g -o main main.cpp
希望它可能会有所帮助