3
(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_pid并且main在同一个源文件中,但只有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在那里!

4

1 回答 1

0

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

于 2011-04-01T06:36:13.033 回答