Mat*_*ate 12 c gcc debug-symbols
当我使用gcc进行发布构建时(即我没有指定-g
),我似乎仍然在二进制文件中使用符号,并且必须使用strip
它们来删除它们.事实上,我仍然可以断点函数并在gdb中获得回溯(尽管没有行号).
这让我感到惊讶 - 任何人都能解释为什么会这样吗
例如
#include <stdio.h>
static void blah(void)
{
printf("hello world\n");
}
int main(int argc, char *argv[])
{
blah();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
gcc -o foo foo.c
nm foo | grep blah
:
08048374 t blah
Pau*_*l R 10
调试符号和链接器符号之间存在很大差异.调试符号将代码位置等映射到源文件名和行号以及各种其他有用的东西,以帮助调试器,分析器等.链接器符号只定义代码中各种入口点和其他重要位置的地址.如果你想要一个完全匿名的可执行文件,那么你需要使用strip
,如你所见.
归档时间: |
|
查看次数: |
8720 次 |
最近记录: |