c - 在控制台模式下更改/过滤 GDB 输出

标签 c linux debugging console gdb

我在预先配置的环境中从控制台使用 GDB,它提供的版本有一些错误。最烦人的是,有时,在单步执行函数或添加断点或打印调用堆栈时,它会喷出数百行与此类似的连续行:

warning: Range for type (null) has invalid bounds 0..-103

我能找到的关于这个问题的唯一引用是 here这没有帮助。

鉴于上述情况,我认为这两者都应该很简单

  1. 指示 GDB 抑制此类警告 - 看起来像死胡同。据我所知,GDB 不允许用户抑制此类警告。

  2. 通过 .gdbinit 在钩子(Hook)中拦截它们 - 看起来很有希望。我能够更改终端颜色,例如,通过浏览 this answer 中引用的 .gdbinit 文件。 .不幸的是,我在 the documentation 中找不到任何钩子(Hook)。这对我的目的很有用。

  3. 过滤警告(可能通过 stdout 和 GDB 之间的某种代理)- 感觉有点老套,但我不介意这样做,如果它能以某种方式工作的话。一个愚蠢的尝试是像这样将 stderr 重定向到 /dev/null:gdb -p xxxxxx 2>/dev/null,但看起来警告实际上被推送到了标准输出。无赖。然后我还想也许我可以做一些愚蠢的事情,比如像这样通过 grep 过滤 stdout gdb -p xxxxxx | grep -v ^warning,但这似乎有一些副作用,即由于某种原因使终端提示不可见。

有人知道什么可行吗?我搜索了很多可以帮助我实现第三个想法的东西,但是到目前为止,我空手而归......

最佳答案

首先,gdb 无法过滤警告。警告机制无法从 CLI 或 Python 层进行编程。

升级 gdb 可能有帮助——但也可能没有帮助。根据我对您提供的链接的阅读,听起来这个问题与 Fortran 可变长度数组(“VLA”)有关。最后我听说这个特性仍在 gdb 中开发。值得一试,但我不会指望它。

如果警告不影响您的工作,您可以简单地破解 gdb 以删除警告。这应该非常简单——比下一个想法更简单。

如果你真的想要一个包装器来消除警告,要么 (1) 在 emacs 中运行 gdb 并在一些 elisp 中破解以删除这些消息;或 (2) 使用 expect 将 gdb 命令行包裹在删除警告的内容中。

关于c - 在控制台模式下更改/过滤 GDB 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28504527/

相关文章:

c - C 和 C++ 中 'char* numberlist[]' 的长度

java - 有理数到 float

c - 如何为简单的命令行解释器解析 fgets 中的字符串以存储在 argv[] 中?

linux - XFS 增长不工作

c# - 从 C# 将数据传入和传出 DLL

linux - 在 Linux 中比较两个不同目录中的文件

linux - 如何从 AWS s3 中删除除最新的 5 个最近更新/新文件之外的所有文件?

visual-studio - 在 .NET/Visual Studio 中定义 TRACE 常量

debugging - 多个用户在单个 Kubernetes 集群中调试 Pod

c# - .NET 代码是否随着 CLR 调试器附加到进程而运行得更慢?