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.