2011-04-01 50 views
1
(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有調試符號,爲什麼?

UPDATE

另一個測試用例一個非常簡單的靜態函數:

#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是存在的!

回答

0

如果該函數足夠簡單並且其地址從不使用,則可能是內聯然後被丟棄(因爲不可能從別處調用它)。

+0

@ geekosaur,感謝您的回覆!但我只是做了另一個測試,一個非常簡單的靜態函數,但它並沒有被丟棄。 – gdb 2011-04-01 06:42:25

+0

然後你必須顯示整個源文件。但說實話,我想你想問問編譯器它做了什麼('gcc -v ...')。 – geekosaur 2011-04-01 06:43:23

+0

@ geekosaur,我已經更新了另一個測試用例:) – gdb 2011-04-01 06:48:29

相關問題