C++ 为什么在Solaris上生成的调用堆栈中总是为函数显示6个参数?

C++ 为什么在Solaris上生成的调用堆栈中总是为函数显示6个参数?,c++,c,debugging,solaris,C++,C,Debugging,Solaris,为什么Solaris中生成的调用堆栈中显示的函数总是包含6个参数 在大多数情况下,原始函数将根本没有6个参数。有时我还发现,显示的参数值与函数声明中的顺序不匹配 任何用于理解这些概念和在Solaris中调试的指针或链接都会很有帮助。我相信,根据您的Solaris版本(64位?),调用约定指定了通过寄存器传递的函数的前6个参数。即使没有使用它们,调试器也可能只是显示这6个寄存器的内容 编辑:来自 考虑到堆栈跟踪中显示的六个值无论如何都不可能来自寄存器,这似乎是一个脆弱的连接。寄存器只能用于当前函数

为什么Solaris中生成的调用堆栈中显示的函数总是包含6个参数

在大多数情况下,原始函数将根本没有6个参数。有时我还发现,显示的参数值与函数声明中的顺序不匹配


任何用于理解这些概念和在Solaris中调试的指针或链接都会很有帮助。

我相信,根据您的Solaris版本(64位?),调用约定指定了通过寄存器传递的函数的前6个参数。即使没有使用它们,调试器也可能只是显示这6个寄存器的内容

编辑:来自


考虑到堆栈跟踪中显示的六个值无论如何都不可能来自寄存器,这似乎是一个脆弱的连接。寄存器只能用于当前函数,但pstack显示调用堆栈上所有函数的值。@Rob-这最初是在SPARC上完成的,由于SPARC的寄存器窗口,它们可以来自寄存器:
Note that pstack doesn't know how many arguments there are so it always displays six. So if you know that some function has only two arguments, ignore whatever pstack displays after the first argument.