C++ CORE DUMP gdb 调试

125 篇文章 5 订阅

先查看内存转储的大小限制:

ulimit -c

返回的结果是以512 bytes为单位的。
如果没有返回结果,说明设置为0,需要进行手动设置:ulimit -c unlimited
测试代码:

#include <stdio.h>
void foo()
{
    int *ptr = 0;
    *ptr = 7;
}

int main()
{
    foo();
    return 0;
}

运行会报错如下:

segmentation fault (core dumped)

因为之前设置了大小为500,所以当前目录下回出现文件core

下面对core文件进行分析,一般是使用gdb进行分析(Linux下C++的调试工具基本只有gdb)

-> # gdb ./test core    
GNU gdb (Debian 7.12-6) 7.12.0.20161007-git
Reading symbols from ./test...done.
[New LWP 5794]
Core was generated by `./test'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x0000000000400492 in foo () at test.cpp:5
5       *ptr = 7;
warning: File "/usr/local/lib64/libstdc++.so.6.0.26-gdb.py" auto-loading has been declined by your `auto-load safe-path' set to "$debugdir:$datadir/auto-load".
To enable execution of this file add
    add-auto-load-safe-path /usr/local/lib64/libstdc++.so.6.0.26-gdb.py
line to your configuration file "/root/.gdbinit".
To completely disable this security protection add
    set auto-load safe-path /
line to your configuration file "/root/.gdbinit".
For more information about this security protection see the
"Auto-loading safe path" section in the GDB manual.  E.g., run from the shell:
    info "(gdb)Auto-loading safe path"

这里说明了第5行有问题。
我们可以使用backtrace列出程序崩溃时产生的调用堆栈:

(gdb) backtrace 
#0  0x0000000000400492 in foo () at test.cpp:5
#1  0x00000000004004a4 in main () at test.cpp:10

在调用堆栈中上下移动:

(gdb) up
#1  0x00000000004004a4 in main () at test.cpp:10
10      foo();
(gdb) down
#0  0x0000000000400492 in foo () at test.cpp:5
5       *ptr = 7;

参考:C++ Tutorial - Debugging: Core/Memory Dump - 2018

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当出现“dump文件没生成”时,通常指的是指定的程序或进程崩溃或出现异常时,系统没有生成对应的崩溃转储文件(也称为dump文件或核心转储文件),从而导致无法分析异常发生的原因。 要解决“dump文件没生成”的问题,首先需要对系统环境和程序本身进行仔细分析。以下是一些可能导致该问题的原因: 1. 用户权限不足或没有配置相应的dump文件路径:在某些系统中,需要使用管理员或超级用户权限才能生成dump文件。同时,如果没有配置相应的dump文件路径,系统无法将崩溃转储保存至指定的文件目录。 2. 系统没有自动配置生成dump文件:在某些操作系统中,默认情况下可能没有开启自动生成dump文件的功能。 3. 应用程序本身不支持生成dump文件:部分应用程序可能没有提供捕捉程序异常并生成dump文件的功能。 要针对不同的原因解决该问题,需要按以下步骤进行操作: 1. 检查当前用户权限并切换到管理员或超级用户,尝试再次触发程序异常并查看是否生成了相应的dump文件。 2. 检查操作系统中的相关设置,如注册表、配置文件等,确认是否开启了生成dump文件的功能。 3. 针对具体的应用程序,可以尝试使用调试工具进行调试,或者查阅应用程序的文档/官方网站,了解其生成dump文件的方法和配置。 总之,“dump文件没生成”通常是由于系统或应用程序本身的配置问题或权限不足等原因导致的。根据具体情况进行相应的调整,即可解决该问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangpeterx

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值