我在预先配置的环境中从控制台使用GDB,它提供的版本有一些错误。最令人讨厌的是,有时,当进入函数或添加断点或打印调用堆栈时,它会喷出数百个与此类似的连续行:
warning: Range for type (null) has invalid bounds 0..-103
我唯一可以找到此问题的参考资料是here,并且它没有任何帮助。
鉴于上述情况,我认为它应该很简单
指示GDB禁止此类警告 - 看起来像死路一条。据我所知,GDB不允许用户禁止此类警告。
通过.gdbinit在钩子中拦截它们 - 看起来很有希望。我能够改变终端颜色,例如,通过戳this answer中引用的.gdbinit文件。不幸的是,我无法在the documentation找到任何可能对我有用的钩子。
过滤警告(可能通过stdout和GDB之间的某种代理) - 感觉很乱,但我不介意这样做,如果它会以某种方式工作。一个愚蠢的尝试是将stderr重定向到/dev/null
,如此:gdb -p xxxxxx 2> /dev/null
,但看起来警告实际上被推送到stdout。游民。然后我也想到也许我可以做一些愚蠢的事情,例如通过grep过滤stdout,如gdb -p xxxxxx | grep -v ^warning
,但这似乎有不必要的副作用,使得终端提示因某种原因而不可见。
有谁知道什么可行?我搜索了很多可以帮助我实现第三个想法的东西,但到目前为止,我空手而归......
答案 0 :(得分:1)
首先,gdb中没有办法过滤警告。警告机制不能通过CLI或Python层进行编程。
升级gdb可能会有所帮助 - 但可能没有。从我阅读你提供的链接,听起来问题与Fortran可变长度数组(" VLA")有关。最后我听说这个功能仍然在gdb中进行。值得一试,但我不会指望它。
如果警告不会干扰您的工作,您可以简单地破解gdb以删除警告。这应该非常简单 - 比下一个想法更简单。
如果你真的想要一个包装器来消除警告,可以(1)在emacs中运行gdb并在某些elisp中删除这些消息;或者(2)使用expect
将gdb命令行包装在丢弃警告的内容中。