这些不同的十六进制地址(用粗体表示)的意义是什么?) ?如何从崩溃转储堆栈的十六进制地址中获得下面转储函数的源代码的确切问题行数,具体用于ios平台构建。我知道add2line是用来从十六进制地址获取行号的linux平台。
==8587==ERROR: AddressSanitizer: heap-use-after-free on address 0x611000112680 at pc 0x000124c4c2e5 bp 0x700003c58130 sp 0x700003c58128
READ of size 8 at 0x611000112680 thread T32
# 00 x124c4c2e4in fun1(param1,param2, param3)+0xac4(TestApp: x86_64 +0 x122eba2e4)
#1 0x124c4d88a in fun2(param1)+0x29a (TestApp:x86_64+0x122ebb88a)
这些不同的十六进制地址的意义是什么
第一个数字(0x124c4c2e4
)是检测到heap-use-after-free
的指令地址。
第二个数字:0xac4
表示地址0x124c4c2e4
与& fun1()+0xac4
相同,即fun1()
内部发生错误访问。
最后一个数字告诉你问题函数位于哪个二进制中,以及与该二进制的映射位置的偏移量。
那么,我们可以推断出&fun1() == 0x124c4c2e4 - 0xac4 == 0x124c4b820
和TestApp
被映射到0x124c4c2e4 - 0x122eba2e4 == 0x1d92000
。
如何获得源代码的确切问题行数
必须用调试信息编译代码。注意:地址可能会改变——你需要用-g
重新构建并获得一个新的报告。
我知道add2line是用来从十六进制地址获取行号的linux平台。
这个答案可能有用。