小编Cha*_*l72的帖子

C中与static关键字的内部链接

我知道static在C中是一个重载的关键字.在这里,我只关心它作为一个关键字用来强制内部链接.

如果在.c文件中声明了全局变量,则使用static和不使用之间有什么区别static?无论哪种方式,没有其他.c文件可以访问变量,因此该变量基本上是文件的"私有",有或没有static关键字.

例如,如果我有一个文件foo.c,并且我声明了一个全局变量:

int x = 5;

该变量x仅对内部代码可用foo.c(除非我在一些带有extern关键字的共享头文件中声明它).但是如果我没有在头文件中声明它,那么如果我输入的话会有什么不同:

static int x = 5.

无论哪种方式,它似乎x都有内部联系.所以我static对这方面的目的感到困惑.

c static linkage

11
推荐指数
2
解决办法
4793
查看次数

难以让GDB加载调试符号

我经常使用GDB来调试C/C++程序,而且我对它的工作原理以及它能做什么都很了解.

然而,每隔一段时间我就会遇到一些神秘的问题,我似乎无法让GDB从核心文件中正确加载符号.

目前,我在共享NFS目录中有一个二进制可执行文件.可执行文件肯定是使用-g3标志编译的.可执行文件崩溃并将核心文件转储到我的Linux机器的/ home目录中.

出于某种原因,我无法让GDB从核心文件加载符号.

当我尝试:

$ gdb <executable_file> <core_file>
Run Code Online (Sandbox Code Playgroud)

GDB加载,但我无法获得回溯,并且没有加载调试符号.

如果我运行GDB,然后在GDB提示符下输入core <core file name>它会加载核心文件,我发现核心文件肯定与之前崩溃的二进制可执行文件相关联.但是,GDB报告"无法从内存中读取有效的目标文件图像",因此我无法获得有意义的反向跟踪,并且没有加载调试符号.

有谁知道这可能是什么原因?通常我可以让GDB正确加载核心文件并读入调试符号,但在这种情况下它不起作用.可能是因为二进制可执行文件存储在共享NFS挂载上?

c c++ linux gdb

3
推荐指数
1
解决办法
8922
查看次数

标签 统计

c ×2

c++ ×1

gdb ×1

linkage ×1

linux ×1

static ×1