作为我的JOB的一部分,我经常需要分析带有/不带核心转储的不可重现的零售崩溃。我一般都配备
通常,根据偏移并通过objdump
生成拆卸,我计算失败的指令(机器代码/汇编代码)。
下一个工作很繁琐。我尝试将失败的指令映射到实际的源位置。这是耗时且痛苦的。是否有一种无痛,简便的方法将源代码映射到失败的指令?
我尝试使用gcc -S
选项使用汇编源,但无法有效映射源。我通常找不到一种逻辑方法来将汇编输出映射到带源的崩溃偏移量。
请建议推荐的方法。
答案 0 :(得分:4)
创建零售代码并启用调试信息,然后在发货前将其剥离,但请保留好。然后,您可以使用副本分析核心转储。
答案 1 :(得分:0)
这里的关键是拥有一个精确的版本系统(包括用于存储源代码的版本控制软件),以便您可以拥有一对确定的二进制和源代码匹配对。这应该包括什么版本的编译器,以及用于构建最终二进制文件的所有编译器选项和所有头和库代码。
现在,如果你有这个,你可以重新创建一个与客户运行的相同的构建,但是使用调试信息,并在gdb中使用它来调试代码。