如何使用gdb调试java虚拟机_GDB入门教程之如何使用GDB启动调试

GDB (The GNU Project Debugger)是 Linux 系统下调试 C 和 C++ 程序的主要神兵。Vim教程网(https://vimjc.com)介绍多种方式下使用 GDB 启动进程调试的方法和命令。

要使得 C 和 C++ 程序能在 GDB 下正常进行调试,必须在程序编译期间把基本的调试信息(如变量名、函数名、函数调用堆栈等)添加到可执行文件中。gcc、cc、g++ 等编译器可通过编译参数 -g 指定添加调试信息。

当使用 GDB 加载不包含调试信息的二进制文件或进程时,GDB终端会提示错误信息:”no debugging symbols found”。

一、GDB调试未执行程序

对于本地的某个二进制文件 demo ( GDB 也支持远程调试),若其启动时不需要命令行参数,则可以在shell下使用命令 gdb demo 进入 GDB,并输入 run (缩写形式 r) 启动对demo的调试。

若 demo 程序启动时需要命令行参数,则可以在使用 gdb demo 命令进入 GDB 后,使用命令 run arg1 arg2... 提供命令行参数并启动对 demo 程序的调试。

bea4a36c11db7457b1998e54d6126d0f.gif

二、GDB调试运行中程序

使用 GDB 调试正在运行的程序时,必须先找到该程序运行在操作系统中的进程号 (PID)。可以使用 Linux 命令 ps ef | grep -w demo、 ps aux | grep -w demo 或 pidof demo 获取到 demo 进程当前的进程号。

获取到待调试的目标进程号后 (假设为 pid ),可以使用 gdb 命令进入 GDB 终端,并使用 attach pid 的方式启动对当前正在运行的 demo 进程的 GDB 调试。

也可以使用 gdb -p pid 命令直接进入 GDB 并启动对该进程的调试。

对于使用多线程模式的进程,可以在 GDB 中使用 info threads 命令显示当前进程中所有线程的基本调试信息,包括:GDB 分配的线程ID、线程堆栈等。线程列表中,GDB 线程 ID 左侧的 * 表示当前真正被调试的线程。

可通过 thread tid 命令切换和启动对 GDB 线程号为 tid 的线程进行调试。关于使用 GDB 调试多进程和多线程,后续会有独立的文章进行详细介绍。

7be22d3db65d5c1d7f1073d20475f805.gif

三、GDB调试core文件

当程序在 Linux 系统下发生异常崩溃(如段错误)时,内核会将该应用程序在崩溃发生时的内存数据、程序调用堆栈等核心信息转存到磁盘,这种功能称之为 core dump,中文可翻译为 核心转储。

core dump 是程序异常退出时的内存快照,是异常发生后对程序进行现场还原和故障排查的关键线索。Linux 进程 core 掉可以说是所有 C 和 C++ 程序员接触最频繁而又最不想碰到的问题。

可通过 ulimit -c 查看和指定 core 文件的大小,通过修改 /proc/sys/kernel/core_pattern 文件可指定 core 文件保存在本地磁盘中的路径和文件名格式。

GDB 对 core 文件的分析和调试提供了非常强大的功能支持,可使用 gdb demo/data/core/xxx 启动对 demo 进程某次产生的core文件 /data/core/xxx 的分析和调试,也可以使用 gdb -c /data/core/xxx 加载和分析 core 文件。

GDB 正常加载 core 文件后,便可以使用 backtrace (缩写形式 bt) 显示程序异常退出时刻的函数堆栈情况,再使用 frame、 print、 up、 down、 where 等命令对异常现场进行详细分析。

为了让程序产生 dump ,将 demo.cpp 中的输出语句 printf("%s: %d\n",(char*)ptr,array[i]); 改成 printf("%s: %s\n",(char*)ptr,array[i]); 后在编译时加入 -w 参数忽略掉警告后重新生成 demo 可执行文件。

553ff18efc9cece99b69bea99299ebdc.gif

关于 GDB 调试程序和 core 文件的具体方法和命令,请关注Vim教程网(https://vimjc.com)后续 GDB 系列的后续文章。

PS:使用 quit (缩写形式 q) 可退出 GDB。

转自:https://vimjc.com/debug-program-with-gdb.html

weixin_39962394
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
gdb java_用GDB 调试Java程序
weixin_30978239的博客
02-23 1076
陈皓http://blog.csdn.net/haoel背景想要使用GDB调试程序,就需要用GNU的编译器编译程序。如:用GCC编译的C/C++的程序,才能用GDB调试。对于Java程序也是一样的,如果想要用GDB调试,那么就需要用GNU的Java编译器——GCJ来编译Java程序。目前,很多Linux都不会预装Sun的JVM,取而代之是使用GNU的开源编译器来编译和运行Java程序。比如RedH...
GDB 调试Java程序
热门推荐
陈皓专栏 【空谷幽兰,心如皓月】
04-13 3万+
GDB 调试Java程序 陈皓http://blog.csdn.net/haoel  背景 想要使用GDB调试程序,就需要用GNU的编译器编译程序。如:用GCC编译的C/C++的程序,才能用GDB调试。对于Java程序也是一样的,如果想要用GDB调试,那么就需要用GNU的Java编译器——GCJ来编译Java程序。 目前,很多Linux都不会预装Sun的JVM
2024年最全基于GDAL的JAVA生成GDB文件实战,2024年最新一文带你搞懂大数据开发多线程Handler
最新发布
2401_84159688的博客
05-10 294
/ 注册所有的驱动// 为了支持中文路径,请添加下面这句代码// 为了使属性表字段支持中文,请添加下面这句/*******************定义坐标系********************//*******************输出gdb图层、表********************/String saveGdbPath = "D:/creategdb/测试生成gdb1210.gdb";System.out.println("FileGDB" + " 驱动不可用!
gdb java,调用gdb调试java程序
weixin_39862899的博客
03-19 454
错误没有这样的文件或目录,gdb如果错误消息来自emacs,则表示未安装 gdb . 要解决此问题,请安装 gdb . 请注意 gdb 不是emacs的一部分,它是一个单独的程序 . 如果你得到一个包的 gdb ,它通常是 gcc ,GNU编译器集合的一部分,而不是Emacs . 来源是相同的 - FSF(自由软件基金会)/ GNU项目(GNU不是Unix),但它是不同的/单独的包 .如果错...
gdb调试java_gdb调试工具
weixin_29901323的博客
02-23 195
查看帮助一是man 命令,二是进入www.gnu.org,找到gdb的帮助文档(更详细)。gcc -Wall -g main.c -o main,只有这样才能产生调试信息,包括core的调试信息。一、常用命令run(r) 运行,执行到断点,重新用r,表示重新开始执行。list(l) 列出源代码,l 2,l main,l 2,16(数字表示行数)。break(b) 设置断点,b 2,b mai...
Linux应用调试使用gdbgdbserver命令详解
09-15
Linux系统中的调试是开发者不可或缺的技能之一,特别是对于嵌入式开发来说,远程调试工具如gdbgdbserver更是必不可少。本文将详细介绍如何利用这两个工具进行Linux应用调试gdb(GNU Debugger)是一个强大的源...
嵌入式Linux GDB调试技术
07-08
嵌入式Linux GDB调试技术是指在嵌入式系统中使用GDB调试程序的一种技术。GDB(GNU Debugger)是一种功能强大且灵活的调试器,可以在各种平台上使用。嵌入式Linux GDB调试技术的主要目的是掌握Linux GDB调试方法和...
Linux实验七 GDB程序调试
04-25
编写一个应用程序,使用gdb调试,并熟悉gdb中几个最常用的命令 2、实验器材: 软件: 安装了ubuntu的VMware虚拟机。 硬件: PC机一台。 3、背景知识: 细节详见官方网站相关内容:...
一个可以用gdb调试linux内核的环境
06-10
自己搭建的一个可以用gdb调试linux内核的环境,解压后看README,其中有详细的搭建过程。 简单来说就是在一台linux主机上用bochs虚拟机调试内核。 用到的工具: 一台linux主机 bochs源码,压缩包中已有 busybox源码,...
gdb调试器命令学习总结笔记
12-14
简单总结了gdb调试的一些方法
GDB 调试工具指南
12-21
目录: 1、准备工作 2、运行程序 3、单步执行 4、断点 5、查看变量 6、查看内存 7、查看源文件信息
gdb 调试java进程_使用GDB调试JNI代码
weixin_39828783的博客
02-28 318
本文链接:http://blog.csdn.net/kongxx/article/details/7329515最近在碰到一段JNI代码不停的出现core dump,用gdb看了一下core文件,信息也不是很清楚,于是想到了运行是debug JNI代码,对于JNI代码要想动态debug还是有点小工作要做的,如下:1. 首先修改java参数,添加-Xdebug -Xrunjdwp:transport...
gdb调试java_使用GDB调试JNI代码
weixin_42463199的博客
02-23 398
调试JNI的c/c++代码,我一直使用打印log的方式,费时费力。在网上搜索使用GDB调试JNI的文章也不多。后来在stackoverflow偶然看到ndk-gdb才知道自己把NDK的重要文档忽略了。于是赶快试验,没想到确实不难。现把使用方法记录下来。NDK文档我总结了一下,有几方面需要了解:● 使用方式cd $PROJECT$NDK/ndk-gdb● 前提条件- 必须使用 ndk-build 编...
gdb 调试java进程_GDB多进程调试
weixin_39847732的博客
02-28 326
在 C 语言中创建多进程程序需要使用 fork 相关的一些函数,调用一次 fork 函数就会创建一个进程。多进程调试时,我们需要对调试的进程和未调试的进程进行设置。下面介绍的一些命令是我们在调试时经常使用到的。1. GDB默认调试的是父进程,我们可以设置调试的进程,使用命令:set follow-fork-mode 其中 mode 为设置调试的进程:可以是child,也可以是parent。当 mo...
java 调试 gdb_用GDB 调试Java程序
weixin_39843698的博客
02-12 272
(gdb) rStarting program: /home/hchen/java/sum[Thread debugging using libthread_db enabled][New Thread -1243736400 (LWP 18131)][New Thread -1245406320 (LWP 18134)][Switching to Thread -1243736400 (LWP ...
gdb调试(快速上手)
choose_heart的博客
10-08 38
通过info 查询断点编号,删除即可(gdb每次启动之后断点编号被删除了,编号一直增长,即使删除了不会调整)这种代码编译出的的就是release版本,是无法用gdb调试的,所以想要进入调试,就得用下面的命令。就会从第一行开始显示,往后你只需要敲回车就会一直显示后面的代码,因为gdb会记录最近执行的命令。图中3这个断点对应的Enb下就已经是no,说明断点被禁用,调试时也就不会在这里被击中而停下程序。输入指令就可以看见代码,但是这个是gdb自己选择的行号开始显示,如果你想指定行号。打断点和查看断点如下示例。
gdb调试使用
shuyong1999的专栏
02-22 1084
一:列文件清单 1. List (gdb) list line1,line2 二:执行程序 要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符()和外壳通配符(*、?、[、])在内。 如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。 利用set args命令就可以修改发送给程
Vmware+gdb调试Linux内核——工欲善其事,必先利其器
GrubLinux的专栏
06-01 1万+
今天我终于
通过gdb调试虚拟机
05-31
要通过gdb调试虚拟机,需要先在虚拟机启动时添加调试选项,例如: ``` qemu-system-x86_64 -s -S ``` 其中,`-s` 表示在本地监听1234端口,`-S` 表示在启动时暂停CPU执行,等待gdb连接。 接着,在另一个终端中...

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
154
原创
44
点赞
249
收藏
37
粉丝
关注
私信
写文章

热门文章

  • 计算机无法启动 显示进入省电模式,进入省电模式无法开机 13360
  • ca证书驱动_登录电子税务局时提示请检查CA设备是否插好或驱动是否正确安装... 8162
  • c#程序设计实训报告心得体会_关于实训的心得体会4篇 6773
  • hbuilder简单网页模板_网页制作软件教程:怎么制作网页? 5916
  • relu函数_深度学习中常用的激活函数详解 5012

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 一台服务器 显示屏,服务器主机 显示屏
  • web服务器中虚拟主机安装方法,web服务器中虚拟主机实现方法
  • 虚拟服务器怎么开子目录,虚拟主机不支持子目录,放置多站点的实现方法
2021年152篇
2020年205篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司同乐英文网站建设宝安网站定制爱联网站开发坪地百度爱采购宝安网站搜索优化沙井SEO按天计费坪山百度网站优化排名大运优秀网站设计惠州网站优化按天收费木棉湾网站优化按天计费罗湖模板网站建设布吉网站seo优化西乡关键词排名包年推广坪地关键词排名包年推广光明设计网站大鹏网站优化按天收费坂田建站横岗百搜标王木棉湾网站优化按天计费平湖企业网站制作沙井网站制作石岩阿里店铺运营坪地网站关键词优化福田seo网站推广坑梓阿里店铺运营大鹏网站建设设计观澜百度标王大鹏模板推广龙岗建设网站福永网站排名优化歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化