微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

打印当前语句在gdb中引用的所有变量符号的值,例如对于assert...失败

如何解决打印当前语句在gdb中引用的所有变量符号的值,例如对于assert...失败

我确定我们都看过foo,并且想知道bar是假还是gdb是假。

有没有办法说服-ggdb3来检查这样的表达式-即使在调试核心文件时-也可以打印它引用的任何符号的值?更好的是,当使用#4 0x0000000000xxxxxx in Foo (....) at file:111 111 Assert(foo || bar); 构建可执行文件时,递归地包括宏扩展吗?

我现在看到的是这样的:

(gdb) some_magic_command
  foo: (int32_t) 42
  bar: (int32_t) 0

我正在寻找的是做事的能力:

echo <<varname>>:

同样,就像为语句中直接引用的每个变量都运行了ptype <<varname>>p <<varname>>Assert(foo || bar)

p foo显然是一个任意的示例语句来说明这一点。如果我可以只编写p bar%%bash cd /data/ref/ grep -v ">" EN | wc -c > ref cat ref cd /example/ grep -v ">" SR | wc -l > sample cat sample echo $((x= cat sample,y= cat ref,u=x/y,z=u*100)) 的脚本,就没有问题要问了。

用于标识和打印的变量不一定在同一编译单元中,也不在同一ELF可执行文件中。他们可能是外部人员,也可能是搬迁人员。当然,只有在当前上下文中可以解决这些问题时,它们才能显示出来。

但是肯定有某种方法吗?

有人知道我想念什么吗?

解决方法

在gdb中没有直接的方法可以做到这一点。 gdb不知道任何给定语句引用了哪些变量-该信息不在调试信息中。

您可以想象通过在Python中编写一条命令来实现此目的,该命令(1)从源代码中提取当前代码行的文本,(2)使用某种技术从该行的文本中提取变量。但是,这很难正确完成,尤其是对于C ++。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。