基于局部变量存在性的GDB流量控制 我试图编写一个GDB脚本(遗产,不是Python),它将打印本地变量(C或C++结构)成员的信息,但只有当本地变量存在时才可以。比如: # 'magic' should be evaluate to "if 'info locals' has a variable named foo, then # evaluate to true, otherwise evaluate to false. if (magic) print foo->member end

基于局部变量存在性的GDB流量控制 我试图编写一个GDB脚本(遗产,不是Python),它将打印本地变量(C或C++结构)成员的信息,但只有当本地变量存在时才可以。比如: # 'magic' should be evaluate to "if 'info locals' has a variable named foo, then # evaluate to true, otherwise evaluate to false. if (magic) print foo->member end,c++,c,gdb,C++,C,Gdb,我知道这有点做作,因为局部变量依赖于堆栈框架(因此我可能最好让它以框架为条件),但我仍然想知道是否有可能做到这一点。首先,Python在这方面的优势远远大于它。这就是我们将其添加到gdb的原因 然而,这仍然可以用一个旧的gdb来完成。然而,这太糟糕了,在完成之后,我认为您会更加欣赏Python方法。您要做的是:首先,使用各种“设置日志记录”命令将输出重定向到临时文件。然后使用gdb命令打印您需要的信息,在本例中类似于“info local”。然后,使用“shell”命令将临时文件改写为一个本身是

我知道这有点做作,因为局部变量依赖于堆栈框架(因此我可能最好让它以框架为条件),但我仍然想知道是否有可能做到这一点。

首先,Python在这方面的优势远远大于它。这就是我们将其添加到gdb的原因

然而,这仍然可以用一个旧的gdb来完成。然而,这太糟糕了,在完成之后,我认为您会更加欣赏Python方法。您要做的是:首先,使用各种“设置日志记录”命令将输出重定向到临时文件。然后使用gdb命令打印您需要的信息,在本例中类似于“info local”。然后,使用“shell”命令将临时文件改写为一个本身是gdb脚本的文件。例如,使用“sed”检测输出中是否存在变量,然后发出“set$var_exists=1”。最后,“source”这个脚本的结果,并测试设置的便利变量


哎哟。但是它很管用。

谢谢汤姆!我之前放弃了Python脚本,因为我无法让模块gdb和Python-2.6gdb.py在我的平台()上很好地运行,所以我认为现在使用遗留脚本更容易。现在回想起来,我好像把孩子和洗澡水一起扔掉了,所以我肯定会让Python再转一圈。