Linux GDB

Linux的gdb调试 Debug 版本为可调式版本,生成的可执行文件中包含调试需要的信息。我们作为开发人员,最常用的就是 debug 版本的可执行文件。Debug 版本的生成:因为调试信息是在编译过程时加入到中间文件(.o)中的,所以必须在编译时控制其生成包含调试信息的中间文件。所以debug版本的体积要大一些。gcc -c hello.c -g —> 生成包含调试信息的中间文件或者。 阅读详情

先看看我用的是个什么机器:

$ uname -a
Linux dev 2.4.21-9.30AXsmp #1 SMP Wed May 26 23:37:09 EDT 2004 i686 i686 i386 GNU/Linux

再看看默认的一些参数,注意core file size是个0,程序出错时不会产生core文件了。

$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) 4
max memory size (kbytes, -m) unlimited
open files (-n) 2048
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 7168
virtual memory (kbytes, -v) unlimited

写个简单的程序,看看core文件是不是会被产生。

$ more foo.c

#include

static void sub(void);

int main(void)
{
    sub();
    return 0;
}

static void sub(void)
{
    int *p = NULL;

    /* derefernce a null pointer, expect core dump. */
    printf("%d", *p);

}

$ gcc -Wall -g foo.c
$ ./a.out
Segmentation fault

$ ls -l core.*
ls: core.*: No such file or directory

没有找到core文件,我们改改ulimit的设置,让它产生。1024是随便取的,要是core文件大于1024个块,就产生不出来了。

$ ulimit -c 1024

$ ulimit -a
core file size (blocks, -c) 1024
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) 4
max memory size (kbytes, -m) unlimited
open files (-n) 2048
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 7168
virtual memory (kbytes, -v) unlimited

$ ./a.out
Segmentation fault (core dumped)
$ ls -l core.*
-rw------- 1 uniware uniware 53248 Jun 30 17:10 core.9128

注意看上述的输出信息,多了个(core dumped)。确实产生了一个core文件,9128是该进程的PID。我们用GDB来看看这个core。

$ gdb --core=core.9128
GNU gdb Asianux (6.0post-0.20040223.17.1AX)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-asianux-linux-gnu".
Core was generated by `./a.out'.
Program terminated with signal 11, Segmentation fault.
#0 0x08048373 in ?? ()
(gdb) bt
#0 0x08048373 in ?? ()
#1 0xbfffd8f8 in ?? ()
#2 0x0804839e in ?? ()
#3 0xb74cc6b3 in ?? ()
#4 0x00000000 in ?? ()

此时用bt看不到backtrace,也就是调用堆栈,原来GDB还不知道符号信息在哪里。我们告诉它一下:

(gdb) file ./a.out
Reading symbols from ./a.out...done.
Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb) bt
#0 0x08048373 in sub () at foo.c:17
#1 0x08048359 in main () at foo.c:8


此时backtrace出来了。

(gdb) l
8         sub();
9         return 0;
10     }
11
12     static void sub(void)
13     {
14         int *p = NULL;
15
16         /* derefernce a null pointer, expect core dump. */
17         printf("%d", *p);
(gdb)

 
【Linux】Linux下调试器gdb的使用 debug和release版本的认识、gbd指令集、图文演示gdb的使用 阅读详情

相关推荐

linux生成core文件

linux下生成core文件,便于你系统进行调试,很不多的方法啊!

88x2cu: Unknown symbol delay_ms (err -2)

kernel 5.4, 更新wifi驱动,报这个88x2cu: Unknown symbol delay_ms (err -2),尝试了添加这个,测试OK了。

ConceptCon 1475

uniapp: err = err.replace(this._UNI_INPUT_DIR_REG, ‘UNI_TypeError: err.replace is not a function问题修复

问题:uniapp的依赖包出现了问题,需要升级解决办法:升级uniapp依赖包,下载"semver"和”@dcloudio/uni-i18n“两个包,本地锁定postcss为7版本,就解决了。

py_boy的博客 1453

正点原子STM32MP157开发板加载驱动模块报错:Unknown symbol __gnu_mcount_nc (err -2)

使用正点配套内核源码编译了驱动ko文件,在stm32mp157板子上无法直接加载,解决了加载时的两个问题: 一是 ERROR: could not insert module *.ko: Invalid module format 二是unknown symbol in module

汉尼拔勇闯天涯 2200

ESP32水墨屏日历实战:低功耗自动更新与HTTPS数据解析

本文详细介绍了ESP32水墨屏日历项目的开发实践,重点讲解了低功耗自动更新与HTTPS数据解析的实现方法。通过ESP32的自动休眠功能和水墨屏的零功耗特性,结合HTTPS请求安全获取网络数据,实现了高效节能的桌面日历应用。项目代码开源,适合物联网开发者参考。

xx56789的博客 777

OpenEuler22.03 LTS下Zabbix7.0监控系统的容器化部署避坑指南(含Docker-Compose完整配置)

本文详细介绍了在OpenEuler22.03 LTS操作系统上容器化部署Zabbix7.0监控系统的完整流程,包括Docker引擎配置、Docker-Compose编排、网络模式选择及性能调优等关键步骤。针对OpenEuler环境下的特殊问题提供了解决方案,帮助用户高效搭建稳定可靠的监控系统。

python9snake的博客 267

临时记录

http://www.ziwu.org/login.php? 文件检索网站 $ uname -aLinux dev 2.4.21-9.30AXsmp #1 SMP Wed May 26 23:37:09 EDT 2004 i686 i686 i386 GNU/Linux再看看默认的一些参数,注意core file size是个0,程序出错时不会产生core文件了。$ ulimit -a

yfw418的专栏 761

STM32 FOC电机控制:手把手教你用CubeMX配置TIM1中心对齐PWM(含代码避坑)

本文详细解析了STM32 FOC电机控制中TIM1中心对齐PWM的配置方法,涵盖CubeMX图形化设置、HAL库代码调用及常见问题排查。特别针对L6230Q驱动芯片的使能逻辑和死区时间配置提供实用指南,帮助开发者高效实现无刷电机的高性能控制。

weixin_27027459的博客 442

GDB 调试出现:Couldn't find general-purpose registers in core file

现在平台基本都是64位的,用平台默认的gdb工具来加载vmlinux和ramdump会出现:warning: Couldn't find general-purpose registers in core file.warning: Couldn't find general-purpose registers in core file. #0 <unavailable> in ?? ()这是因为

ForDream321的专栏 6570

【Claude Code】Not logged in 未登录错误解决方案 + /login 认证路径

Claude Code 启动时提示 Not logged in 表示当前会话缺少有效凭证。本文从环境变量、API Key 配置、CI 自动化凭证脚本和系统时钟四个维度,提供完整的认证排查流程与修复方案。

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 893

BME688传感器原理图设计,已量产(环境传感器)

在便携式空气质量监测、可穿戴健康设备这类低功耗场景中,BME688 这类集成了 VOC、温湿度、气压的四合一 MEMS 传感器越来越受欢迎 —— 它体积小、功耗低,刚好匹配便携设备的需求。但这类小信号传感器对电源噪声、电平匹配的要求很细,今天结合实际项目里的一款 BME688 接口电路,聊聊硬件设计的关键细节。

不脱发的程序猿 514

【Linux】GDB保姆级调试指南(什么是GDB?GDB如何使用?)

GDB是Linux下非常好用且强大的调试工具。GDB可以调试C、C++、Go、java、 objective-c、PHP等语言。对于以后想称为一个Linux下工作的c/c++程序员,GDB是必不可少的工具,所以本篇来从零讲解GDB在LInux的调试。 对于GDB调试器来说,不像VS编译器中那样的图形化界面形式,而是采用纯命令行的形式进行调试。so 在开始学习的时候,大家可能会感觉晦涩难懂,但是这是C/C++程序员必须要掌握的技能,所以我将手把手进行零基础的讲解,本篇以C语言来讲解和调试。

weixin_45031801的博客 13万+

HarmonyOS 鸿蒙开发DevEco Studio OpenHarmony:安全测试

通过对HarmonyOS应用生命周期建模和应用攻击面建模,采用静态数据流分析技术,提高漏洞发现的准确率,同时覆盖20余种攻击面,65+漏洞测试项,帮助开发者提前发现和识别漏洞隐患。在检测报告中,会针对每一项漏洞风险项给出明确的修复建议,可以帮助开发者快速修复漏洞。

斌擎科技 1181

Linux·gdb用法详解

gdb(GNU Debugger)是一个强大的调试工具,广泛用于调试 C、C++、Fortran 和其他编程语言的程序。gdb 支持多种调试功能,包括断点、单步执行、变量查看、内存操作和多线程调试等。通过合理使用这些功能,可以有效地定位和解决程序中的错误。本文详细介绍了release版本与debug版本的区别,gdb调试过程中的各种命令。

czy02的博客 4810

Zephyr内核——内存管理——内存堆

Zephyr提供了一组允许线程动态分配内存。

wayne2018的博客-心情驿站 771

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

linux—常用gdb调试命令汇总

如果是函数递归调用,当还没开始递归时,finish会执行完整个函数,自动走完全部递归过程(前提无断点)。因为在linux系统下,默认生成的可执行程序是release版,但是调试需要debug版本。*gdp会自动记录最近的命令,如果没有输入其他命令,可以按enter键继续执行最近命令。需要注意的是,不能直接写变量名,变量编号使用infodisplay即可知道。如果我们需要在调试中一直显示某个变量的值,那么就需要display命令了。需要注意的是,这种方法只能显示一次变量值,当继续调试时变量不再显示。...

weixin_61857742的博客 2万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Linux之GDB调试

GDB 是一个开源的、功能强大的调试工具,主要用于调试 C、C++ 等语言编写的程序。它支持多种操作系统和架构,能够帮助开发者在程序运行过程中暂停执行、查看变量值、修改程序状态等,从而快速定位和修复问题。断点是调试过程中非常重要的工具,它可以让程序在指定的位置暂停执行,方便我们查看程序状态。当程序出现异常时,查看调用栈可以帮助你了解程序的执行路径。它会从当前栈帧开始,向上列出所有调用栈帧的信息,包括函数名、文件名、行号等。如果你在启动 GDB 时已经指定了程序参数,可以直接输入。

zzh_Zao的博客 4363

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Linux调试器gdb

前面我们介绍了gcc/g++的使用,我们知道在VS平台下编写代码是可以调试的,调试是我们经常使用的纠错手段,在Linux平台下也有相关的调试工具,那就是gdb,调试是我们必须掌握的技能,没有调试项目的错误就无法快速解决!​相信gdb的学习可以助力你在Linux相同上更顺利的构建大型工程,从容的面对各种bug,虽然在使用上与VS还有些差异,但是配合Linux上的其他工具一定可以使效率有一定的提升!

ARMCSKGT的博客 3733

Linux中GDB安装与使用

前言 gdb是Linux环境下的代码调试工具,为了能在linux环境下更有好的编程体验。其安装可谓是势在必行。 安装过程 安装gdb的过程很简单,具体步骤如下: 查看当前gdb安装情况 rpm -qa|grep gdb if(有)(删除) rpm -e --nodeps 文件名 if(没有) 首先(下载gdb源码包),直接在Linux中输入 wget http://ftp.gnu.org/gnu/gdb/gdb-7.10.1.tar.gz 解压 tar -zxf gdb-7.10.1.tar.gz 进

weixin_46048542的博客 2万+

linux gdb 调试 权限,linux下GDB调试

linux下GDB是一个非常强大的调试工具,但是他不像vs一样具有强大的图形界面,基本都靠命令来进行调试,对于新手来说也算是个坎。下面就跟大家一起探究一下gdb这个强大的调试工具。1.开启core1.1 查看core是否开启$ulimit -c00:表示关闭,不会生成core文件;否则此值说明core文件的最大限制;1.2 打开开启core打开/etc/profile$sudo gedit /et...

weixin_31746149的博客 1372

Linux工具学习之【gdb】

vim可以编写代码,gcc/g++可以编译代码,此时只最后一件神器,就能进行完整的开发工作,那就是通过gdb调试代码,毕竟谁都不敢保证自己的代码没有问题,所以就有调试器这种东西帮助我们定位问题,进而解决问题。

北 海的博客 3853

linux下的gdb调试

在vs下程序有debug版本和release版本,debug版本方便程序员调试,release版本也就是发布版本,是供用户调试使用的。gcc/g++的可执行程序默认是release版本。上图代码是个简单的小程序,通过这个代码我们来测试一下gcc下编译后的可执行程序是否是release版本。通过使用makefile来进行编译debug版本则需要加“-g”也就是debug的最后一个字母。myexe的文件大小明显比myexe-debug文件大小要小readelf,elf大致意思是查看文件的格式.

. 1170

Linux开发工具——gdb篇

编写代码我们使用vim,编译代码我们使用gcc/g++,但是我们,不能保证代码没问题,所以调试是必不可少的。与gcc/vim一样,Linux下的调试功能也是独立的一个工具——gdb那么我们话不多说,开启今天的话题!

欢迎来到阿熊的blog~~ 2698

linux 上使用gdb

dir 命令可以将源文件目录添加到 GDB 的搜索路径中,方便查看其他文件中的代码。) 分别向前和向后搜索指定的正则表达式。使用 info breakpoints (或 i b) 命令可以查看所有已设置的断点信息,包括断点编号、类型、位置、条件等。在 GDB 中,断点是调试过程中非常重要的工具,它允许在程序执行到特定位置时暂停,以便检查程序状态、变量值等信息。list 命令 (或 l) 是最常用的查看代码命令,它可以显示当前执行位置附近的代码。frame 命令可以切换到不同的栈帧,并显示对应栈帧的代码。

heeheeai的博客 1529

【Linux】gdb的使用

Linux下gdb的使用

爱打酱油的新一的博客 1134
上一篇: SQL Server 2000基础教程——字符串函数(二)
下一篇: 自定义函数。用户自定义函数(User Defined Functions)SQL Server 2000
suacker
博客等级 码龄24年 46粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值