Debugging 通过gdb用户定义的命令返回值

Debugging 通过gdb用户定义的命令返回值,debugging,gdb,core-file,Debugging,Gdb,Core File,我正在用一个核心文件进行调试,所以我没有运行任何东西的活动进程 我正在使用gdb用户定义的命令来检查核心文件中的一组数据,并尝试使用用户定义的命令简化过程 但是,我无法找到一种方法使用户定义的命令返回可以在其他命令中使用的值 例如: (注意“返回”行上的注释) 理想情况下,dump_linked_list命令将返回列表中找到的节点数,以便在另一个定义的命令中使用: define higher_function set $total_nodes = dump_linked_list

我正在用一个核心文件进行调试,所以我没有运行任何东西的活动进程

我正在使用gdb用户定义的命令来检查核心文件中的一组数据,并尝试使用用户定义的命令简化过程

但是,我无法找到一种方法使用户定义的命令返回可以在其他命令中使用的值

例如:
(注意“返回”行上的注释)

理想情况下,dump_linked_list命令将返回列表中找到的节点数,以便在另一个定义的命令中使用:

define higher_function
    set $total_nodes = dump_linked_list
    printf "Total Nodes is %d\n", $total_nodes
end
在gdb命令中可能出现这种情况吗?


我觉得一定是这样,但我一直在搜索文档,找不到它的任何提及或任何示例。

据我所知,GDB没有这样的功能。您可以设置您知道的某个名称的变量,并将其用作“返回”值。例如,始终按如下方式设置变量retval

set $retval = <whatever value>
set$retval=

然后,所有新定义的函数都可以使用它作为以前调用的函数的返回值。我知道这只是一种变通方法,但它相对简单,而且有效

我发现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) 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