这样做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 kernelAndroid系统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中,例如:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)