从核心转储获取被调用函数的返回值

时间:2018-10-12 22:53:18

标签: c gcc gdb

如果有的话,例如:

#include <stdlib.h>
int f(void) { return 42; }
int g(void) { return 43; }
int main()
{
    if(f()!=g())
        abort();
}

是否可以从核心转储中获取f()g()的返回值,而无需将原始代码分配给变量? (int lhs, rhs; if((lhs=f())!=(rhs=g())) abort();

1 个答案:

答案 0 :(得分:2)

否-即使没有内联,比较也可能会被编译为减法,然后进行零测试,从而在转储时不再存在至少一个返回值(在寄存器或内存中)

通过优化,即使将值存储在变量中也无济于事:它肯定会消除无效存储。