先决条件
1.安装apport(automatically generate crash reports for debugging)
2.修改/etc/security/limits.conf文件,使允许core dump,或者用ulimit -c unlimited设置core dump文件的大小为unlimited
3.C/C++的编译开关-g(产生调试符号)
######运行编译好的程序testc(我的程序)
kimi@kimi-desktop:~/testc/bin/Debug$ ./testc
######下面一行显示了core dumped表示成功,core文件在/var/crash或者在当前目录
段错误 (core dumped)
kimi@kimi-desktop:~/testc/bin/Debug$ ls
######果然在当前目录
core testc
######gdb一下
kimi@kimi-desktop:~/testc/bin/Debug$ gdb testc core
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu"...
warning: Can't read pathname for load map: Input/output error.
Reading symbols from /usr/lib/libstdc++.so.6...done.
Loaded symbols for /usr/lib/libstdc++.so.6
Reading symbols from /lib/tls/i686/cmov/libm.so.6...done.
Loaded symbols for /lib/tls/i686/cmov/libm.so.6
Reading symbols from /lib/libgcc_s.so.1...done.
Loaded symbols for /lib/libgcc_s.so.1
Reading symbols from /lib/tls/i686/cmov/libc.so.6...done.
Loaded symbols for /lib/tls/i686/cmov/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Core was generated by `./testc'.
######程序是由于段错误退出的
Program terminated with signal 11, Segmentation fault.
[New process 13072]
######段错误的地方在dummy_function - main.c的第5行
#0 0x080483a4 in dummy_function () at /home/kimi/testc/main.c:5
5 *ptr = 0x00;
######打印一下调用堆栈
(gdb) bt
#0 0x080483a4 in dummy_function () at /home/kimi/testc/main.c:5
#1 0x080483bc in main () at /home/kimi/testc/main.c:12
(gdb)
分享到:
相关推荐
coredump 文件的生成与解析 coredump 文件是 Linux 操作系统中的一个重要概念,它记录了程序崩溃时的内存状态和寄存器信息,为程序崩溃后的调试和分析提供了重要的依据。本文将详细介绍 coredump 文件的生成和解析...
在线调试是在程序运行的过程中进行调试,而Coredump分析是在程序异常退出后,通过分析Coredump文件了解程序崩溃时的状态,以确定崩溃的原因。 在线调试是开发者在程序运行时进行调试的过程,可以实时查看程序的运行...
2. **生成 coredump 文件**:运行编译好的程序,使其因为某种原因而产生 coredump 文件。 3. **使用 GDB 加载 coredump 文件**:一旦获得了 coredump 文件,就可以使用 GDB 对其进行调试了。命令格式为 `gdb ...
【SegmentFault(coredump)调试方法】 在编程和软件开发过程中,遇到程序崩溃或SegmentFault是一种常见的问题。这时,利用core dump进行调试可以帮助开发者找出问题的根源。core dump是操作系统在程序异常终止时生成...
coredump可以参考:coredump的介绍及产生的几种可能情况 gcc选项 -g:在可执行文件中加入源码信息,比如:可执行文件中第几条机器指令对应源代码的第几行,但并不是把整个源文件都嵌入到可执行文件中,而是在调试时...
当系统允许产生core dump文件时,程序崩溃会生成一个包含进程内存状态的文件。通过gdb或其他工具分析core dump,可以详细地了解段错误发生时的内存布局和变量状态。 4. 使用valgrind: Valgrind是一个用于内存调试...
通过编译运行这段代码(使用`gcc -g core_dump_test.c -o core_dump_test`),并在程序执行时人为触发错误(如上例中的非法内存访问),即可生成core文件。 #### 三、分析Core文件 一旦生成了core文件,就可以...
此外,GDB还可以读取异常终止的核心转储文件,即`core dump`,用于分析程序崩溃的原因。使用`gdb -h`或`gdb --help`可以查看更详细的选项说明。 ### 编译代码以支持调试 为了使GDB能够有效地工作,源代码在编译时...
举例来说,GDB支持多线程调试,可以对程序的内存、寄存器等底层信息进行查看和修改,甚至可以用来调试核心转储文件(core dump)等。 然而,对于习惯了图形化界面的开发者来说,可能觉得命令行调试工具不如图形化...
这条命令用于解除core dump文件大小的限制,确保可以生成完整的core文件。需要注意的是,这仅对当前会话有效,为了永久生效,还需要修改系统的配置文件。 **步骤二:设置core dump文件的位置** 编辑`/etc/sysctl....
当程序产生coredump(核心转储)时,gdb可以加载coredump文件和相应的程序映像进行后处理分析。heapstat提供了gdb扩展命令,可以在gdb内直接调用,查看程序崩溃时的内存状态。这对于分析内存相关问题,尤其是那些...
此外,GDB还能处理core dump文件,或者与已经运行的进程连接。 为了让GDB能够正确地进行调试,编译代码时需要包含调试信息。这通常通过在编译命令中添加`-g`选项来实现。例如,使用`gcc -g your_code.c -o your_...
另外,系统级别的core dump策略可以通过`/proc/sys/kernel/core_pattern`文件进行配置,例如将其设置为`/var/crash/core.%e.%p.%h.%t`,这样core文件将以可读的格式命名并保存在特定目录下。 总的来说,理解和利用...
就报core dump之类错误。 这个makefile我也修改了。我想哪怕一行行gdb,我也要把这个程序调通。实在不行,直接给matz写封信,请他帮助在ubuntu下调通。 另外,为了少报些错,我把gcc进行了降级,目前我使用的是...
- 当程序崩溃产生core dump文件后,可以通过`gdb 程序名 core`来调试。 - 使用`where`命令找出程序崩溃的具体位置。 - `bt`或`backtrace`可以查看崩溃时的堆栈信息。 - `ba`或`backtrace all`打印完整的堆栈信息...
- 当系统开启core dump功能,且程序触发段错误时,系统会将内存映像保存到硬盘上的core文件中。 - 使用`ulimit -a`查看当前core文件的大小限制,如果为0,则表示不允许生成core文件。 - 通过`ulimit -c unlimited...
若要调试core dump文件,可以使用`gdb <程序> core`,而调试正在运行的进程则需`gdb <程序> <进程ID>`或在GDB中使用`attach <进程ID>`命令。GDB提供丰富的命令,如`help`查询命令用法,`quit`或`ctrl+d`退出,`break...