热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【持续更新】GDB使用笔记

多文件程序的调试,例子:文件结构:demoMakefilesrcdemo.cpputil.cppincludeutil.h截图:-----

多文件程序的调试,例子:

文件结构:

/demo

  Makefile

  /src

    demo.cpp

    util.cpp

  /include

    util.h

截图:

 

----------------------------------------------------------------------

 

-----------------------------------------------------------

注意detach和kill的区别,仔细看文档的说明:

detach

When you have fiished debugging the attached process, you can use the detach
command to release it from gdb control. Detaching the process continues its
execution. After the detach command, that process and gdb become completely 

independent once more, and you are ready to attach another process

or start one with run. detach does not repeat if you press RET again after
executing the command.

kill

Kill the child process in which your program is running under gdb.
This command is useful if you wish to debug a core dump instead of a running process.
gdb ignores any core dump fie while your program is running.


On some operating systems, a program cannot be executed outside gdb while you have
breakpoints set on it inside gdb. You can use the kill command in this situation to permit
running your program outside the debugger.


The kill command is also useful if you wish to recompile and relink your program,
since on many systems it is impossible to modify an executable fie while it is running in a
process. In this case, when you next type run, gdb notices that the fie has changed, and
reads the symbol table again (while trying to preserve your current breakpoint settings).

GDB文档下载地址:https://www.gnu.org/software/gdb/documentation/

 

-----------------------------------------------

如何给被调试的程序设置命令行参数:

gdb demo_exe

set args ...

show args // 查看已设置的命令行参数

或者

gdb demo_exe

run ...

参考资料:http://www.cnblogs.com/rosesmall/archive/2012/04/10/2440514.html

-----------------------------------------------------------

专题-GDB设置断点,变量观察:http://wangjinxin7.blog.163.com/blog/static/1752150162012175255611/

专题-GDB打印变量、指针、结构:http://blog.chinaunix.net/uid-26822401-id-3155297.html

---------------------------------------------------------

这里着重讲一下GDB的TUI模式,尽管没有GUI方便,不过还是比命令行要直观一些的,相比命令行界面最大的好处就是你能直观的看到你当前程序跑到哪个位置了,也不用在GDB和EDITOR之间来回切换,并且你可以在一个窗口中同时查看源代码、汇编代码、寄存器、命令行4个区域(如果你都打开的话)。

其他方面,TUI模式与命令行模式基本没有区别

 

TUI - Text User Interface,说白了,就是在command-line的窗口上画一个类似GUI的界面,效果图如下

 

这里主要说一下最基本的也是最常用的使用方法(相关的命令),完整的文档可以去http://www.gnu.org/software/gdb/documentation/下载一个PDF来看,目前TUI的内容在Chapter 25

 

1.打开/关闭TUI模式

gdb -tui

其中可选

开关次模式的快捷键是CTRL+X A,意思就是你按着CTRL不放的同时,依次按X,A

2.如果你不需要查看寄存器和汇编指令的话,只打开源代码窗口(src)和命令窗口(cmd)即可

layout src

3.另外,如果你需要在源代码窗口按KEY_UP,KEY_DOWN,KEY_LEFT,KEY_RIGHT,KEY_PGUP,KEY_PGDN,KEY_HOME,KEY_END进行代码查看的话,使用如下命令可以切换到带源代码窗口

focus src

类似的如果你需要在命令窗口使用KEY_UP,KEY_DOWN查看命令的话,使用如下命令切换到命令窗口

focus cmd

------------------------------------------------------------

命令的话,这里大多数只写缩写的格式。可以打开GDB后输入help查看帮助,或者直接去看documentation或网上的教程

n

单步(step over, next)

break

给某个函数打断点

break

在某一行打断点

l

可以不要,如果没有,则从第一行开始列出源码(list)

ENTER

执行上一次命令

info break

查看断点信息

r

运行程序(run)

p

打印变量的值(print)

bt

查看调用栈(backtrace)

finish

退出函数

c

继续运行直到遇到下一个断点(continue)

q

退出GDB(quit)

info locals

查看局部变量

info watch

查看监视

break if

满足的情况下在特定的行或函数中断,condition是程序中合法的boolean表达式

condition

给已存在的断点设置中断条件

delete/disable/enable

删除/启用/禁用 断点/监视

watch

添加监视,满足的情况下中断,condition是程序中合法的boolean表达式

frame <#frame-number>

切换frame&#xff08;其实一个frame就是调用栈的一层&#xff09;&#xff0c;可以结合info locals查看调用栈各层的local变量&#xff0c;利用bt命令可以查看当前调用栈的所有frame(#0为栈顶frame)

set &#61;

给变量设置新值&#xff0c;比如你有一个char buf[255]你可以在GDB调试的时候输入set *buf&#61;&#39;M&#39;从而把buf[0]修改为‘M’&#xff0c;你可以通过p buf来查看

----------------------------------------------------------------------

我的GDB学习路线&#xff1a;

// 介绍了最最最基础的命令

http://blog.csdn.net/haoel/article/details/2879

// 下面这一篇非常重要&#xff0c;必看

http://www.ibm.com/developerworks/cn/linux/sdk/gdb/index.html

上面那篇讲到core dump file的时候&#xff0c;如果发现无法产生core dump file&#xff0c;则参考这篇文章&#xff1a;http://www.cnblogs.com/qrlozte/p/4435065.html

另外&#xff0c;上面那篇讲到连接进程的内容的时候&#xff0c;一般要用sudo命令提供root密码才行&#xff0c;比如

sudo gdb demo_exe attach 28688

或者&#xff0c;拆开为3条命令

sudo gdb

// 输入root密码

file demo_exe

attach 28688 // ./demo_exe & 可以查看到process id

http://www.programlife.net/gdb-manual.html

  &#64;



推荐阅读
  • 在第七天的深度学习课程中,我们将重点探讨DGL框架的高级应用,特别是在官方文档指导下进行数据集的下载与预处理。通过详细的步骤说明和实用技巧,帮助读者高效地构建和优化图神经网络的数据管道。此外,我们还将介绍如何利用DGL提供的模块化工具,实现数据的快速加载和预处理,以提升模型训练的效率和准确性。 ... [详细]
  • 通过整合JavaFX与Swing,我们成功地将现有的Swing应用程序组件进行了现代化改造。此次升级不仅提升了用户界面的美观性和交互性,还确保了与原有Swing应用程序的无缝集成,为开发高质量的Java桌面应用提供了坚实的基础。 ... [详细]
  • jQuery Flot 数据可视化插件:高效绘制图表的专业工具
    jQuery Flot 是一款高效的数据可视化插件,专为绘制各种图表而设计。该工具支持丰富的图表类型和自定义选项,适用于多种应用场景。用户可以通过其官方网站获取示例代码和下载资源,以便快速上手和使用。 ... [详细]
  • 本文深入解析了 Apache 配置文件 `httpd.conf` 和 `.htaccess` 的优化方法,探讨了如何通过合理配置提升服务器性能和安全性。文章详细介绍了这两个文件的关键参数及其作用,并提供了实际应用中的最佳实践,帮助读者更好地理解和运用 Apache 配置。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 本文介绍了一种专为清洁工人设计的自定义文本烟花效果。通过该功能,用户可以输入特定的感谢或祝福语句,系统将生成绚丽的烟花动画,以表达对清洁工人的敬意和感激之情。该特效不仅美观,还能增强用户的互动体验,提升公共场合的氛围。 ... [详细]
  • 多种实现 Windows 定时自动执行任务的专业技巧与方案
    在Windows系统中,实现定时自动执行任务有多种专业技巧和方案。常见的方法包括:使用Windows任务计划程序、开发Windows服务以及利用SQL Server Agent作业。这些方法被广泛应用于各种自动化场景,多数技术人员对此都有所了解。 ... [详细]
  • 本文深入探讨了 C# 中 `SqlCommand` 和 `SqlDataAdapter` 的核心差异及其应用场景。`SqlCommand` 主要用于执行单一的 SQL 命令,并通过 `DataReader` 获取结果,具有较高的执行效率,但灵活性较低。相比之下,`SqlDataAdapter` 则适用于复杂的数据操作,通过 `DataSet` 提供了更多的数据处理功能,如数据填充、更新和批量操作,更适合需要频繁数据交互的场景。 ... [详细]
  • 初次接触AJAX是在去年,当时主要是通过手动编写客户端代码来实现,还需处理被请求的页面,过程相当繁琐。尽管之前就听说过AJAX.NET,但一直没有机会深入了解。本文将作为初学者的指南,详细介绍AJAX.NET的基本概念、核心功能及其在实际项目中的应用技巧,帮助读者快速上手并掌握这一强大的开发工具。 ... [详细]
  • 如何将PHP文件上传至服务器及正确配置服务器地址 ... [详细]
  • 在学习SmartClient过程中,许多开发者会参考IssueVision和TaskVision这两个示例程序。然而,这些程序的安装过程较为复杂,特别是对数据库配置有较高要求。为了帮助初学者顺利上手,本文将详细分享这两个程序的源代码,并提供详细的安装指南和常见问题解决方案,确保用户能够快速、顺利地完成安装和配置。 ... [详细]
  • 第五章详细探讨了 Red Hat Enterprise Linux 6 中的 Ext3 文件系统。5.1 节介绍了如何创建 Ext3 文件系统,包括必要的命令和步骤,以及在实际操作中可能遇到的问题和解决方案。此外,还涵盖了 Ext3 文件系统的性能优化和维护技巧,为用户提供全面的操作指南。 ... [详细]
  • 本文探讨了在 Silverlight 应用程序中实现多窗口界面的方法,通过引入浮动窗口组件,增强了应用的交互性和用户体验。该方案详细介绍了技术实现过程,包括窗口管理、布局调整及跨窗口通信机制,为开发者提供了实用的参考。 ... [详细]
  • 在Python 3环境中,当无法连接互联网时,可以通过下载离线模块包来实现模块的安装。具体步骤包括:首先从PyPI网站下载所需的模块包,然后将其传输到目标环境,并使用`pip install`命令进行本地安装。此方法不仅适用于单个模块,还支持依赖项的批量安装,确保开发环境的完整性和一致性。 ... [详细]
  • 本文探讨了将PEBuilder转换为DIBooter.sh的方法,重点介绍了如何将DI工具集成到启动层,实现离线镜像引导安装。通过使用DD命令替代传统的grub-install工具,实现了GRUB的离线安装。此外,还详细解析了bootice工具的工作原理及其在该过程中的应用,确保系统在无网络环境下也能顺利引导和安装。 ... [详细]
author-avatar
elsister789_4592
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有