为什么这个静态函数没有调试符号?
(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
就在那里!
(gdb) l main
...
4614 if (do_daemonize)
4615 save_pid(getpid(), pid_file);
(gdb) l save_pid
Function "save_pid" not defined.
and there's its definition in source file:
static void save_pid(const pid_t pid, const char *pid_file) {
FILE *fp;
...
}
save_pid
and main
are in the same source file,but only main
has debug symbol,why??
UPDATE
Another test case with a really simple static function:
#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
But the symbol test
is there!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果函数足够简单并且其地址从未使用过,则它是静态的,它可能已被内联,然后被丢弃(因为不可能从其他地方调用它)。
If the function is simple enough and its address is never used, being
static
it may have been inlined and then discarded (since there is no possibility of it being called from elsewhere).