美文网首页
GDB 调试Coredump问题

GDB 调试Coredump问题

作者: RonZheng2010 | 来源:发表于2018-12-14 22:59 被阅读0次

1. 生成带调试信息的程序

  • 直接用g++编译:
$ g++ -g -ggdb -o test test.cpp

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

$ cmake -DCMAKE_BUILD_TYPE=Debug ../test

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

SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")

2. 设置Linux生成Core

2.1 设置core文件的大小

$ ulimit -c unlimited

2.2 设置core文件的名称

$ echo core-%e-%p > /proc/sys/kernel/core_pattern

%e - insert coredumping executable name into filename 添加导致产生core的命令名
%p - insert pid into filename 添加pid(进程id)

3. 生成core文件

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

$ kill -s SIGSEGV <pid>

4. 调试Core

4.1 加载程序和core文件

$ gdb <exec> <core> 

或者进入gdb后

(gdb) file <exec>
(gdb) core <core>

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

4.2 加载动态库的符号

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

4.2.1 用info sharedlibrary查看动态库

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

(gdb) info sharedlibrary

4.2.2 设置solib-absolute-prefix

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

target上:

/opt/publish

host上:

/home/ronzheng/opt/publish

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

(gdb) set solib-absolute-prefix /home/ronzheng

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

(gdb) set sysroot /home/ronzheng

4.2.3 设置solib-search-path

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

(gdb) set solib-search-path <path1:path2:path3>

5. 调试多线程

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

(gdb) info threads
(gdb) thread <tid>

相关链接

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

相关文章

  • GDB 调试Coredump问题

    1. 生成带调试信息的程序 直接用g++编译: 如果用CMake编译工程,则使用选项CMAKE_BUILD_TYP...

  • 嵌入式开发 - GDB调试Coredump问题

    这里介绍如何用Coredump文件查找崩溃的位置,使用的工具是gdb。另外一种调试Coredump问题的方便的办法...

  • 【转】用backtrace()调试coredump问题

    嵌入式开发环境下,用gdb调试coredump的问题可能是件麻烦事。用 backtrace() 和 backtra...

  • android 系统gdb 调试coredump

    一 介绍 core dump 一般是在segmentation fault(段错误)的情况下产生的文件,需要通过u...

  • core调试

    嵌入式开发时,程序出现coredump之后,收集core文件并在宿主机上进行调试。 原理: 1. gdb工具 2....

  • case art hang

    一、抓取Coredump 二、debug coredump 1 找到gdb,以1881为例路径在 cd /preb...

  • Linux 崩溃捕获 crash-handler

    Linux 应用在崩溃后,能产生 coredump 文件,可以通过 gdb 分析崩溃原因,但 coredump 文...

  • iOS 安全配置

    一、关于GDB挂起问题 1.首先什么是GDB,GDB就是调试工具,在iOS中 xcode中的断点查看就是调试工具中...

  • 2. gdb的使用

    参考链接1. GDB调试2. gdb调试方法3. gdb调试示例 1. 说说 gdb gdb 是一款 UNIX 系...

  • gcc常用命令

    gdb相关 gcc加-g才能使用gdb调试gdb -tui a.out打开调试界面run/stop/continu...

网友评论

      本文标题:GDB 调试Coredump问题

      本文链接:https://www.haomeiwen.com/subject/nlpnhqtx.html