【发布时间】:2018-11-16 01:06:40
【问题描述】:
我有这个源代码:
#include <iostream>
int snsn = 344;
int main()
{
int anothername = 29;
std::cout << &snsn << "\n";
system("pause");
}
链接最终图像文件后,我在文件上运行dumpbin /SYMBOLS source.exe,但这是输出:
Dump of file source.exe
File Type: EXECUTABLE IMAGE
Summary
1000 .00cfg
1000 .data
1000 .idata
3000 .rdata
1000 .reloc
1000 .rsrc
7000 .text
10000 .textbss
为什么不显示任何符号?
【问题讨论】:
-
/symbols 转储 COFF 符号,即出现在 .obj 和 .lib 文件中的那种。链接器使用它们。
-
@HansPassant 是的,我实际上设法在目标文件中使用 /SYMBOLS 选项显示了一些符号,但是,你能告诉我为什么它只显示像
snsn这样的全局符号而不是像这样的本地符号作为anothername?如果是这样,你能告诉我如何展示当地的吗? -
链接器不涉及局部变量,它们存储在编译器选择的位置的堆栈帧中。像 snsn 这样的全局变量需要与其他源文件中的其他全局变量合并,因此它们的地址可能会改变。
-
@HansPassant 哦,但是为了让编译器进行类型检查等,每个函数都有“本地”符号表不是必须的吗?既然如此,为什么不能输出这个“本地”符号表的信息呢?
-
调试器对那个细节感兴趣,它使用 PDB 文件。 blogs.msdn.microsoft.com/vcblog/2016/02/08/…
标签: c++ visual-studio