为什么这个静态函数没有调试符号?

时间:2011-04-01 06:33:11

标签: gdb debug-symbols

(gdb) l main
...

4614        if (do_daemonize)
4615            save_pid(getpid(), pid_file);
(gdb) l save_pid
  Function "save_pid" not defined.

在源文件中有它的定义:

static void save_pid(const pid_t pid, const char *pid_file) {
    FILE *fp;
    ...
}

save_pidmain在同一个源文件中,但只有main有调试符号,为什么??

更新

另一个具有非常简单的静态函数的测试用例:

#include <stdio.h>

static int test()
{
        return 0;
}
int main(void)
{
        //int i = 6;
        printf("%f",6.4);
        return 0;
}

gcc -Wall -g test.c test

但符号test就在那里!

1 个答案:

答案 0 :(得分:0)

如果函数足够简单并且从不使用它的地址,那么static它可能已被内联然后被丢弃(因为不可能从其他地方调用它)。