GDB:在调用函数之前显示函数的参数

GDB:在调用函数之前显示函数的参数,gdb,Gdb,在gdb中是否有一个命令可以显示我可以调用的函数的参数?我想输入info functions来发现哪些函数可用,然后发现其中一个函数需要哪些参数。(我正在寻找一种最通用的解决方案,在这种情况下,我不能指望用调试信息编译源代码或可执行文件。) 我意识到您可以在gdb中输入info args,查看当前函数的args。我的问题与此无关 我还意识到,您可以输入反汇编来查看程序集,从而对参数进行反向工程。我希望有一个更快、更可读的替代方案 我想输入info functions来发现哪些函数可用,然后发现其

gdb
中是否有一个命令可以显示我可以调用的函数的参数?我想输入
info functions
来发现哪些函数可用,然后发现其中一个函数需要哪些参数。(我正在寻找一种最通用的解决方案,在这种情况下,我不能指望用调试信息编译源代码或可执行文件。)

我意识到您可以在
gdb
中输入
info args
,查看当前函数的args。我的问题与此无关

我还意识到,您可以输入
反汇编
来查看程序集,从而对参数进行反向工程。我希望有一个更快、更可读的替代方案

我想输入
info functions
来发现哪些函数可用,然后发现其中一个函数需要哪些参数

这正是
info函数
所做的,前提是您使用调试信息编译了代码。例如:

// foo.c
int foo(int x, int y)
{
  return x + y;
}

int main(int argc, char *argv[])
{
  return foo(1, -1);
}
使用
gcc-g foo.c
编译,并:

(gdb) info functions

File foo.c:
1:      int foo(int, int);
6:      int main(int, char **);
...
如果没有调试信息,GDB无法告诉您任何关于
C
函数的信息——它必须反汇编目标函数并对参数进行反向工程,这并不是那么聪明

对于
C++
,它可以做得更好一点:在
g++foo.C
之后:

0x0000000000001125  foo(int, int)
0x0000000000001139  main

这里的
main
具有
extern“C”
链接,因此它的参数不会被损坏。但是
foo()
具有
C++
链接,因此即使没有调试信息,也可以从损坏的名称推断参数类型。

谢谢。我假设源代码对我不可用。所以我不能用调试信息“我正在假设…”编译它——不要假设,而是检查。源代码的可用性和调试信息的可用性是正交的——您可以选择其中一个,而不选择另一个。如果您没有调试信息,并且正在处理
C
,那么答案是“否”。请原谅我说话不准确。我的意思是,我正在寻找一种最通用的解决方案,在这种情况下,我不能指望有源代码。我已经更新了我问题的语言,使之更加精确(但是我不能更新我的评论,因为它太旧了。)但是谢谢你的回答+1.