在1.21版本下cgo编译的程序调用so库,崩溃生成dump文件,用gdb调试无法进入到so库内部

1. 运行环境

go1.21.4

2. 问题描述?

cgo 调用C编写的so库,运行过程中so库崩溃,生成的dump文件,用gdb 加载dump文件,无法显示so库崩溃内存信息,只能显示到go调用C库函数的地方。
验证1:C++调用该so库,生成的dump文件,用gdb调试就可以显示so崩溃时的内存信息
验证2:用go1.17进行编译,然后运行,生成的dump文件,用gdb调试就可以显示so崩溃时的内存信息

3. 您期望得到的结果?

在go1.17版本下编译的程序,调用so库,生成dump文件,通过gdb调试,可以显示so库中错误的行号及方法名称,如下图(c++调用生成dump,):

Go

4. 您实际得到的结果?

在1.21版本下编译,调用so库,生成dump文件,通过gdb调试,无法显示so库中的错误的行号及方法名称,如下图:
Go

讨论数量: 2

目前还是没有解决....还在尝试中,目前定位到和编译器有关系,1.21的版本做了很多优化......

1个月前 评论
symphony09 1个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!