我正在使用核心文件进行调试,所以我没有运行任何内容的活动进程。
我正在使用 gdb 用户定义的命令来检查核心文件中的一堆数据,并尝试使用用户定义的命令简化该过程。
但是,我找不到一种方法来使用户定义的命令返回可以在其他命令中使用的值。
例如:
(注意"返回"行的评论)
define dump_linked_list
set $node = global_list->head
set $count = 1
while $node != 0
printf "%p -->", $node
set $node = $node->next
set $count = $count + 1
end
return $count ## GDB doesn't understand this return
end
理想情况下,我的 dump_linked_list 命令将返回在列表中找到的节点数,以便它可以在另一个定义的命令中使用:
define higher_function
set $total_nodes = dump_linked_list
printf "Total Nodes is %dn", $total_nodes
end
在 gdb 命令中这样的事情可能吗?
我觉得一定是,但我一直在搜索文档,找不到提及它或任何示例。
我发现 gdb 似乎按名称传递,可用于传回返回值。比仅使用单个全局变量更灵活一些。
(gdb) define foo
Type commands for definition of "foo".
End with a line saying just "end".
>set $arg0 = 1
>end
(gdb) set $retval = 0
(gdb) p $retval
$3 = 0
(gdb) foo $retval
(gdb) p $retval
$4 = 1
据我所知,GDB没有这样的功能。您可以设置一个您知道的名称的变量,并将其用作"返回"值。例如,始终像这样设置变量 retval:
set $retval = <whatever value>
然后,所有新定义的函数都可以将其用作以前调用的函数的返回值。我知道这只是解决方法,但它相对简单且有效。