在不进行库调用的情况下,使用GDB调试源文件(及其本地函数)?

在不进行库调用的情况下,使用GDB调试源文件(及其本地函数)?,gdb,Gdb,我想调试一个程序,但我不想让GDB将它访问的代码打印出我的本地源文件范围。在这种情况下,选项step(进入每个调用)和next(即使在同一源文件中也跳过进入函数的步骤)没有用处 有相同的观点吗 谢谢也许可以尝试使用DDD(数据显示调试器)。提醒了很多关于gdb的事情 输入: ddd --gdb 然后 希望它能有所帮助您可以看到我的答案:没有本地GDB命令(据我所知,他们可能已经在这方面工作过),但在Python中很容易做到: import gdb class StepNoLibrary (g

我想调试一个程序,但我不想让GDB将它访问的代码打印出我的本地源文件范围。在这种情况下,选项step(进入每个调用)和next(即使在同一源文件中也跳过进入函数的步骤)没有用处

有相同的观点吗

谢谢

也许可以尝试使用DDD(数据显示调试器)。提醒了很多关于gdb的事情

输入:

ddd --gdb
然后

希望它能有所帮助

您可以看到我的答案:没有本地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

它的功能很容易阅读,它向前执行一个
步骤
,如果该步骤最终存储在
/usr/*
中的文件中,它将
完成
返回应用程序

当然,这是一个幼稚的实现,如果您的需求与此不同,只需编辑功能代码

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()