链接器生成的.map文件有什么用?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链接器生成的.map文件有什么用?相关的知识,希望对你有一定的参考价值。
当使用/ MAP参数或“生成映射文件”项目设置时,VC ++链接器会产生.map文件的用途是什么?我什么时候需要它们?我如何从中受益?
关于如何使用地图文件查找崩溃的好文章。
http://www.codeproject.com/KB/debug/mapfile.aspx
手动完成这一切是非常无趣的。
我不知道有任何工具可以读取地图文件并帮助找到崩溃位置。如果有人知道请更新我们。
对于嵌入式系统,地图文件更有用。 (虽然你不会使用Visual C ++;)
诸如了解程序/数据存储器的耗尽程度以及特定变量所在的位置等问题非常重要。
在分析.hdmp和.mdmp崩溃转储时,WinDBG使用.map和.pdb文件来帮助调试崩溃。
基本上,它们将内存地址映射到.exe(或.dll)中的函数和变量。一般非常有用。
编辑:调试“事后”崩溃的最有用的方法是使用WinDbg(Windows平台)。打开它,打开崩溃转储。然后将源路径设置为指向代码(如果有),指向.map和.pdb的符号路径以及指向.exe的图像路径,并在命令行中键入“!analyze -v” 。现在,您可以获得包含代码行和所有内容的完整堆栈跟踪。 如果路径中有MS符号服务器,并且打开了整页堆或adplus正在运行,那就更好了。看看我最喜欢的两个WinDbg资源: 第一站:: http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx 强制加载符号:: http://www.osronline.com/ShowThread.cfm?link=182377 有用的网站:: http://www.dumpanalysis.org/blog/index.php/category/windbg-tips-and-tricks/page/7/
您很少需要它们,但它们可以方便地调试一些问题,因为它们提供有关函数和数据位置的信息。
例如:
- 所有细分(代码,数据和其他)的详细信息。
- 将行号链接到代码
您可以使用映射文件来调试工具。
当您需要跟踪编译单元和库之间的依赖关系时,链接器映射在大型项目中非常有用。通常,链接器将报告导致问题的符号,并且通常,对此符号名称的简单搜索不会返回任何结果(或者将返回tazxswpoi等符号的大量误报)。
如果没有链接器映射,您唯一的选择就是分析所有可用的源文件(在使用宏时预处理传递,通常就是这种情况)并希望您找到相关的位置。
链接器映射通常有一个名为“按文件/符号引用”的部分,它告诉您项目的另一个目标文件需要哪个目标文件,以及确切引用了哪个符号。
我曾经在一个项目上工作过,该项目必须移植到没有语言环境支持的系统上。链接器报告了“对read
的未定义引用”错误,通过搜索源代码来追踪是很痛苦的。幸运的是,使用_localeconv_r
生成的GCC链接器映射文件通过单次搜索显示了所有有问题的函数。
以上是关于链接器生成的.map文件有什么用?的主要内容,如果未能解决你的问题,请参考以下文章