前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >gdb分析C++程序异常coredump文件

gdb分析C++程序异常coredump文件

作者头像
Autooooooo
发布2022-07-17 10:18:32
1.5K0
发布2022-07-17 10:18:32
举报
文章被收录于专栏:Coxhuang

文章目录

gdb分析CoreDump文件

#1 环境

代码语言:javascript
复制
macOS
Ubuntu18(docker)
  • 安装gdb
代码语言:javascript
复制
# macOS
自带gdb

# Ubuntu
sudo apt install gdb
  • docker 容器配置

在docker容器中使用gdb分析coredump时,再启动容器时,需要加入一些参数

代码语言:javascript
复制
docker run --ulimit core=-1 --privileged
# docker run -itd -p 6789:22 --name=ros --ulimit core=-1 --privileged owner:base-1.3.1

#2 开始

#2.1 测试代码

代码语言:javascript
复制
#include <iostream>
#include <memory>
#include <vector>

struct A{
  std::string s;
};

int main() {
    std::shared_ptr<A> a = nullptr;
    std::vector<int> b;
    std::cout << "-----" << std::endl;
    std::cout << a->s << std::endl; // 异常退出
    // std::cout << b.at(10) << std::endl;
    std::cout << "-----" << std::endl;
    return 0;
}

#2.2 设置core文件

设置core文件的大小

代码语言:javascript
复制
// 当前终端生效,unlimited: 没有限制
ulimit -c unlimited

core文件放到当前路径

代码语言:javascript
复制
// 在docker环境下设置失败
sudo sysctl -w kernel.core_pattern="core-%e"

#2.3 编译(DEBUG模式)

代码语言:javascript
复制
cmake -DCMAKE_BUILD_TYPE=DEBUG ..
make

#2.4 运行/查看

代码语言:javascript
复制
./test
代码语言:javascript
复制
# gdb + 可执行文件 + coredump文件
gbd test core-test

第十三行异常退出

修改异常代码块,再次编译,查看效果

代码语言:javascript
复制
#include <iostream>
#include <memory>
#include <vector>

struct A{
  std::string s;
};

int main() {
    std::shared_ptr<A> a = nullptr;
    std::vector<int> b;
    std::cout << "-----" << std::endl;
    // std::cout << a->s << std::endl;
    std::cout << b.at(10) << std::endl; // 异常退出 
    std::cout << "-----" << std::endl;
    return 0;
}

第十四行异常退出

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • gdb分析CoreDump文件
    • #1 环境
      • #2 开始
        • #2.1 测试代码
        • #2.2 设置core文件
        • #2.3 编译(DEBUG模式)
        • #2.4 运行/查看
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档