为什么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(或用于构建此代码的任何编译器)源代码。这正是我所怀疑的:)感谢您的解释