如何解决打印当前语句在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 举报,一经查实,本站将立刻删除。