GDB调试-小试牛刀

2023-11-02

This is the GNU debugger. Usage:

gdb [options] [executable-file [core-file or process-id]]

gdb [options] --args executable-file [inferior-arguments …]

调试core文件

配置环境

段错误 (核心已转储)

设置ulimit -c unlimited永久生效

vim /etc/security/limits.conf
修改后如下面两行

在这里插入图片描述

$ ulimit -c unlimied #表示不限制core文件大小

$ ulimit -c 10 #设置最大大小,单位为块,一块默认为512字节

设置core文件生成地址

vim /etc/sysctl.conf

添加一行:kernel.core_pattern=core-%e-%p-%t

sysctl -p 让配置立刻生效

总结

目前出现段错误,则core文件就会出现在当前执行目录下面。

$ gdb 程序文件名 core文件名

调试已运行程序

如果程序已经运行了怎么办呢?
首先使用ps命令找到进程id:

$ ps -ef|grep 进程名

或者:

$ pidof 进程名

attach方式

假设获取到进程id为20829,则可用下面的方式调试进程:

$ gdb

(gdb) attach 20829

定位crash问题—addr2line

有时候程序崩溃了但不幸没有生成core文件,是不是就完全没有办法了呢?还是cmdTest的例子。运行完cmdTest之后,我们通过dmesg命令可以获取到以下内容

1 [27153070.538380] traps: cmdTest[2836] trap divide error ip:40053b sp:7ffc230d9280 error:0 in cmdTest[400000+1000]

该信息记录了cmdTest运行出错的基本原因(divide error)和出错位置(40053b),我们使用addr2line命令获取出错具体行号:

1 2 addr2line -e cmdTest 40053b /home/hyb/practice/cmdTest.c:4

可以看到addr2line命令将地址(40053b)翻译成了文件名(cmdTest.c)和行号(4),确定了出错位置。

小结

本节主要介绍了两种类型的GDB启动调试方式,分别是调试未运行的程序和已经运行的程序。对于什么样的程序能够进行调试也进行了简单说明。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GDB调试-小试牛刀 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现

随机推荐

  • Windows编程第一课:纯手工创建一个窗体

    第一节 创建应用程序主窗体 1 创建消息处理函数 LRESULT CALLBACK fWinProc HWND hWnd UINT uMsg WPARAM wParam LPARAM lParam switch uMsg case WM C
  • java stream 常用操作

    stream 常用操作 1 收集对象属性 2 对象属性分组 1 收集对象属性 List ids dataList stream map TradeSalesExwarehouseInfoForRailwayVo getRelatedDocI
  • 海思 ive

    海思 ive 简单例子 https download csdn net download qq 21193563 10047254 https github com hanson young nniefacelib nniefacelib是
  • 代码质量静态检查工具

    一 点睛 代码质量静态检查工具可以自动快速发现劣质代码 潜在Bug 给出代码优化建议 因此代码静态检查工具在实际项目研发中有举足轻重的作用 利用好各种优秀检查工具是做好品质管理的重要环节 二 静态分析和动态分析 代码分析技术分为 第一 静态
  • 【Pycharm教程】推荐一些 PyCharm 中常用的插件

    工欲善其事 必先利其器 PyCharm 上面的插件是非常实用的 能够巧妙的使用插件对于我们的开发功能的帮助非常大 下面我为大家推荐一些不错的插件 1 Key Promoter X 快捷键 用来提示快捷键的插件 帮助我们尽可能的摆脱鼠标操作
  • 147_Merkle(默克尔)树简单理解

    Merkle 默克尔 树 又叫哈希树 是一种典型的二叉树结构 由一个根节点 若干中间节点以及若干叶节点组成 结构示例图 默克尔树的所有叶子节点 都用来存放数据 所有非叶子节点 都用来存放其所有孩子节点的内容的hash值 基于这种数据存储方式
  • MATLAB 使用PLS建模并预测

    1 数据标准化 可省略 例如z score 2 主成分分析 help pca 使用这个指令查看帮助 coeff score latent tsquared explained pca ingredients 3 PLS建模并预测 help
  • web3.0涉及的技术

    非同质化代币 非同质化代币 Non Fungible Tokens NFTs 是一种数字资产 与传统的加密货币 如比特币或以太币 不同 它们具有独特性和不可替代性 NFTs 是基于区块链技术的数字资产 用于表示和证明数字或实物资产的唯一性
  • SpringBoot+SpringMVC+Mybatis+Swagger实现用户注册、登录功能

    SpringBoot Mybatis Swagger实现用户注册 登录功能 文章目录 1 实现流程图 2 后台业务开发 3 启动项目 测试结果 1 实现流程图 2 后台业务开发 添加实体类 entity beans pojo 使用Easy
  • set_multicycle_path

    set multicycle path的语法 保持关系与建立关系相关联 使用以下公式计算最常见情况下的保持周期数 默认情况下 setup path multiplier 是用对应的目的时钟定义的 要修改有关源时钟的setup需求 使用 st
  • js中类数组对象以及类数组转换的方法(ES6, ES5)

    js中类数组对象以及类数组转换的方法 ES6 ES5 类数组 Array like 对象 通常我们可以把拥有一个length属性和非负整数属性的对象称为类数组对象 JavaScript 数组与一般对象的区别 当有新元素添加到列表中时 自动更
  • 企业网络规划和设计方案(一)

    企业网络规划和设计方案 一 工程概况公司有一栋独立大楼 高4层 每层面积2000平方米 由研发技术部 成员60人 分成硬件 25 和软件 35 2大部门 生产部 主要产品是手持电子产品 110人 管理人员10人 和市场部 30个销售 10个
  • AV1生态系统更新:2019年6月

    Kay是热心的AV1关注者 他在blog上持续搜集了关于AV1的进展 很抱歉 我们延误了很久才发布这篇非常不错的blog 希望对你了解AV1有所帮助 文 Kay Singh 译 John 原文 https www singhkays com
  • 分享8个免费的超清背景图片下载网站

    想用免费的桌面背景图 还是前端开发做页面展示 下面推荐10个超清的免费背景图下载网站 1 wallhaven cc wallhaven cc拥有进1000万张高质量壁纸 无广告 支持名称搜索 像素搜索 整体色调搜索 不支持中文 采用IPV6
  • robot自动化测试实现多浏览器支持

    做自动化测试首先要保证的就是用例覆盖面完整 而UI测试首先保证就是浏览器覆盖率问题 robot支持的火狐和谷歌浏览器 IE都很好 当然IE可能有一点问题 不过10 11切换的用问题不大 目前用户大多用360浏览器进行上网 我们构建一下使36
  • 数据挖掘中常用的数据清洗方法有哪些?

    原文来自 https www zhihu com question 22077960 answer 24095218 从两个角度上看 数据清洗一是为了解决数据质量问题 二是让数据更适合做挖掘 不同的目的下分不同的情况 也都有相应的解决方式和
  • 网络编程 用代码创建进程

    创建进程的多种方式 1 鼠标双击启动图标 2 使用代码创建应用进程 如何用代码创建进程 python中有跟进程相关的模块multiprocessing 意思为多进程 from multiprocessing import Process i
  • Java 多线程写同一个文件实现

    最近项目中需要从网站上抓取大量的数据 采用了多线程技术 每个线程抓取的数据都需要保存到一个文件中 避免消耗大量的内存 思路 多个访问线程将需要写入到文件中的数据先保存到一个队列里面 然后由专门的 写出线程负责从队列中取出数据并写入到文件中
  • Activity启动源码分析

    我会思考的是 activity的启动过程是什么样的呢 是什么原理呢 有哪些好的地方 哪些不好的地方呢 可不可以更好呢 首先 是会执行到startActivityForResult 然后会执行Instrumention的execStartAc
  • GDB调试-小试牛刀

    This is the GNU debugger Usage gdb options executable file core file or process id gdb options args executable file infe