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 に答える