当我使用gcc进行版本构建时(即,我没有指定-g
),我似乎仍然以二进制文件中的符号结尾,并且必须使用strip
来删除它们。实际上,我仍然可以使用断点函数并在gdb中获取回溯(尽管没有行号)。为什么gcc将符号添加到非调试版本?
这让我感到惊讶 - 任何人都可以解释为什么会发生这种情况?
例如
#include <stdio.h>
static void blah(void)
{
printf("hello world\n");
}
int main(int argc, char *argv[])
{
blah();
return 0;
}
gcc -o foo foo.c
nm foo | grep blah
:
08048374 t blah