gcc로 릴리스 빌드를 할 때 (즉, -g
을 지정하지 않은 경우), 바이너리에서 심볼로 끝나는 것처럼 보이고,이를 제거하려면 strip
을 사용해야합니다. 사실, 여전히 함수를 중단하고 gdb에서 백 트랙트를 얻을 수 있습니다 (줄 번호는 없지만).gcc가 비 디버그 빌드에 심볼을 추가하는 이유는 무엇입니까?
놀랍게도 - 아무도 이런 일이 일어나는 이유를 설명 할 수 있습니까?
gcc -o foo foo.c
nm foo | grep blah
#include <stdio.h>
static void blah(void)
{
printf("hello world\n");
}
int main(int argc, char *argv[])
{
blah();
return 0;
}
:
08048374 t blah