在控制台模式下更改/过滤 GDB 输出
Altering / Filtering GDB output in console mode
我在预先配置的环境中从控制台使用 GDB,它提供的版本有一些错误。最烦人的是,有时,当进入函数或添加断点或打印调用堆栈时,它会连续喷出数百行,类似于这一行:
warning: Range for type (null) has invalid bounds 0..-103
我能找到的关于这个问题的唯一参考是 here,它没有帮助。
鉴于以上情况,我认为两者都应该很简单
指示 GDB 抑制此类警告 - 看起来像死胡同。据我所知,GDB 不允许用户抑制此类警告。
通过 .gdbinit 在钩子中拦截它们 - 看起来很有希望。我能够更改终端颜色,例如,通过浏览 this answer. Unfortunately, I couldn't find any hook in the documentation 中引用的 .gdbinit 文件,这对我的目的很有用。
过滤警告(可能通过 stdout 和 GDB 之间的某种代理)- 感觉有点老套,但我不介意这样做,如果它能以某种方式工作的话。一个愚蠢的尝试是像这样将 stderr 重定向到 /dev/null
:gdb -p xxxxxx 2> /dev/null
,但看起来警告实际上被推送到了 stdout。无赖。然后我还想也许我可以做一些愚蠢的事情,比如像这样通过 grep 过滤 stdout gdb -p xxxxxx | grep -v ^warning
,但这似乎有副作用,因为某些原因使终端提示不可见。
有人知道什么可行吗?我搜索了很多可以帮助我实现第三个想法的东西,但是,到目前为止,我空手而归...
首先,gdb 无法过滤警告。警告机制无法从 CLI 或 Python 层进行编程。
升级 gdb 可能有帮助——但也可能没有帮助。根据我对您提供的 link 的阅读,听起来问题与 Fortran 可变长度数组 ("VLA") 有关。最后我听说这个特性仍在 gdb 中开发。值得一试,但我不会指望它。
如果警告不影响您的工作,您可以简单地破解 gdb 以删除警告。这应该非常简单——比下一个想法更简单。
如果你真的想要一个包装器来消除警告,要么 (1) 运行 emacs 中的 gdb 和一些 elisp 中的 hack 以删除这些消息;或 (2) 使用 expect
将 gdb 命令行包裹在删除警告的内容中。
我在预先配置的环境中从控制台使用 GDB,它提供的版本有一些错误。最烦人的是,有时,当进入函数或添加断点或打印调用堆栈时,它会连续喷出数百行,类似于这一行:
warning: Range for type (null) has invalid bounds 0..-103
我能找到的关于这个问题的唯一参考是 here,它没有帮助。
鉴于以上情况,我认为两者都应该很简单
指示 GDB 抑制此类警告 - 看起来像死胡同。据我所知,GDB 不允许用户抑制此类警告。
通过 .gdbinit 在钩子中拦截它们 - 看起来很有希望。我能够更改终端颜色,例如,通过浏览 this answer. Unfortunately, I couldn't find any hook in the documentation 中引用的 .gdbinit 文件,这对我的目的很有用。
过滤警告(可能通过 stdout 和 GDB 之间的某种代理)- 感觉有点老套,但我不介意这样做,如果它能以某种方式工作的话。一个愚蠢的尝试是像这样将 stderr 重定向到
/dev/null
:gdb -p xxxxxx 2> /dev/null
,但看起来警告实际上被推送到了 stdout。无赖。然后我还想也许我可以做一些愚蠢的事情,比如像这样通过 grep 过滤 stdoutgdb -p xxxxxx | grep -v ^warning
,但这似乎有副作用,因为某些原因使终端提示不可见。
有人知道什么可行吗?我搜索了很多可以帮助我实现第三个想法的东西,但是,到目前为止,我空手而归...
首先,gdb 无法过滤警告。警告机制无法从 CLI 或 Python 层进行编程。
升级 gdb 可能有帮助——但也可能没有帮助。根据我对您提供的 link 的阅读,听起来问题与 Fortran 可变长度数组 ("VLA") 有关。最后我听说这个特性仍在 gdb 中开发。值得一试,但我不会指望它。
如果警告不影响您的工作,您可以简单地破解 gdb 以删除警告。这应该非常简单——比下一个想法更简单。
如果你真的想要一个包装器来消除警告,要么 (1) 运行 emacs 中的 gdb 和一些 elisp 中的 hack 以删除这些消息;或 (2) 使用 expect
将 gdb 命令行包裹在删除警告的内容中。