GDB 调试Coredump问题

GDB 调试Coredump问题,第1张

如果用CMake编译工程,则使用选项CMAKE_BUILD_TYPE=Debug:

这样做g++编译时就会包含选项-g。如果要同时包含-ggdb选项,可以设置变量CMAKE_CXX_FLAGS_DEBUG。

%e - insert coredumping executable name into filename 添加导致产生core的命令名

%p - insert pid into filename 添加pid(进程id)

运行程序,生成core文件。下面的命令强制生成core文件:

或者进入gdb后

file从文件exec加载symbol和executable, core从core中加载coredump

如果是调试Core的机器(host)不是生成Core的机器(target),则动态库可能不在程序指定的位置上。这时需要指定动态库的位置。

首先用info sharedlibrary,可以查看动态库的symbol是否加载正确

如果库在host上的布局与在target上的布局相同,则使用solib-absolute-prefix比较方便。

target上:

host上:

则可以设置solib-search-path为:

solib-absolute-prefix有个更常用的别名sysroot,所以如下的命令是一样的:

设置solib-search-path可以指定多个路径,路径之间用:隔开。

在多线程的环境下,可以用info threads显示所有线程,thread指定线程为当前线程。

GDB 常用法

GDB 调试Coredump问题

嵌入式开发中GDB调试Coredump问题

嵌入式开发中GDB串口远程调试

用backtrace()调试coredump问题

Valgrind memcheck 用法

Address Sanitizer 用法

段错误及GDB Coredump调试方法

https://blog.csdn.net/oscarjulia/article/details/74256997

gdb调试多进程与多线程

https://blog.csdn.net/snow_5288/article/details/72982594

linux kernel

Android系统coredump

奔跑的码仔

原创

关注

1点赞·4007人阅读

1.打开内核coredump功能

Android系统的linux内核有可能没有打开coredump功能,可以通过查看android系统是否存在/proc/sys/kernel/core_patten配置项来确定,如果没有该配置项,那么需要重新配置内核,并且重新编译,并将其替换掉目标android系统内核(具体更新方试需要根据不同的硬件而定)。下面为coredump内核配置项的具体位置:

make menuconfig

Userspace binary formats-->

 [*] Enable core dump support

开启该选项,系统就支持程序的coredump功能,保存退出,重新编译内核,并下载到目标系统中就可了。重启后,在文件系统中应该就可看到/proc/sys/kernel/core_pattern配置项了。

2.配置coredump的存储位置

将core文件存储位置写入到/proc/sys/kernel/core_pattern即可,但/proc为内存文件系统,系统重启后,该配置会失效,所以对于android系统可以将配置该文件的命令写入到init.rc中,例如:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11248019.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存