使用GDB调试源文件(及其本地函数)而不进入库调用?

时间:2012-11-05 13:54:31

标签: gdb

我想调试程序,但我不希望GDB打印它从本地源文件范围访问的代码。选项 步骤 (进入每次通话)和 下一步 (即使在相同的来源中也会跳过这些功能)文件)在这种情况下没用。

同样的任何一点?

由于

2 个答案:

答案 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

希望它可能会有所帮助