我想调试一个程序,但我不希望 GDB 打印它访问的代码超出我的本地源文件范围。在这种情况下,选项步骤(进入每个调用)和下一步(即使在同一个源文件中也跳过进入函数)没有用。
有相同的点吗?
谢谢
我想调试一个程序,但我不希望 GDB 打印它访问的代码超出我的本地源文件范围。在这种情况下,选项步骤(进入每个调用)和下一步(即使在同一个源文件中也跳过进入函数)没有用。
有相同的点吗?
谢谢
您可以查看我对 GDB 是否有“step-to-next-call”指令的回答 ? :没有本机 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
会返回到应用程序。
当然这是一个幼稚的实现,如果您的要求与此不同,只需编辑功能代码!
也许尝试使用 DDD(数据显示调试器)。提醒了很多关于 gdb
输入:
ddd --gdb
然后
g++ -O0 -g -o main main.cpp
希望它可能会有所帮助