为什么gdb为函数显示不同的参数顺序

为什么gdb为函数显示不同的参数顺序,gdb,Gdb,通过查看带有gdb的核心文件(由C代码生成),我无法理解这两个帧之间的一个特定内容 #2 increment_counter (nsteps=2, steps=0x7f3fbad26790) at gconv_db.c:393 #3 find_derivation (...) at gconv_db.c:426 此代码来自开源glibc其中find\u-derivation调用increment\u-counter如下: result = increment_counter (*handl

通过查看带有
gdb
的核心文件(由C代码生成),我无法理解这两个帧之间的一个特定内容

#2  increment_counter (nsteps=2, steps=0x7f3fbad26790) at gconv_db.c:393
#3  find_derivation (...) at gconv_db.c:426
此代码来自开源
glibc
其中
find\u-derivation
调用
increment\u-counter
如下:

result = increment_counter (*handle, *nsteps);
*句柄
步骤
的类型相同,
递增计数器
功能定义为
静态

为什么
gdb
显示这两个参数的顺序不同

我敢肯定,
glibc
是原样的,没有经过修改

为什么gdb显示这两个参数的顺序不同

GDB对源代码一无所知(可能除了构建时它在磁盘上的位置)

它能够显示参数(及其值),因为编译器(通过将调试信息嵌入到对象文件中)告诉它参数是什么、它们以什么顺序出现、它们的类型以及如何计算它们的值

那么,编译器为什么要对函数参数重新排序呢

该函数是静态的,因此不能从当前翻译单元外部调用。因此,编译器可以自由地对参数重新排序,只要它还在每个调用站点对参数重新排序


不过,它为什么会这样做?一般回答:优化(编译器发现按此顺序传递它们更方便)。详细的答案需要深入研究GCC(或用于构建此代码的任何编译器)源代码。

这正是我所怀疑的:)感谢您的解释