新手入门之GDB调试
写这篇文章算是对最近两天工作的一个经验总结吧。
要让可执行文件比较方便地在DGB上调试,在用gcc编译的时候要使用-g选项。
如何使用GDB启动被调试程序?
"gdb path_to_debugee”,其实这还不是真正的启动,要启动调试程序,还需要在命令行里敲"r"。如果debugee在启动时还要有相应的输入参数,比方说:debugee –p1,那么在前面提到的r命令后面,附带上-p1就可以了,完整的样子看上去是这样的:"r –p1"。
设置断点
通过gdb path_to_debugee启动调试后,就可以设置断点了。设置断点的命令很直观,break。我们可以:
- 在函数的入口设置断点,比方说“break main”。也可以通过类名来限定目标函数。比方说“break classA::func”。
- 根据行号设置断点:break line_number。这条命令默认的行在当前运行的编译单元对应的原文件中。如果要指定某个文件中的某行,请使用:break file.cpp:line_number。
- 条件断点:条件断点的设置和前面提到的类似,就是要加一个判断条件:if condition。类似于“break func/line if some_variable > or < num”的形式。
单步调试
单步有两种形式:
- 单步执行并跳过这一行(VS F10功能):n
- 单步执行并进入(VS F11功能):s
打印变量
这个比较简单,命令行:p var_name
打印堆栈
命令行:backtrace,简写bt
打印源代码
命令行:l。这个命令接受参数。比方说要打印从第几行到第几行,可以这么做:l 1,18。这会打印当前执行文件第1行到18行的代码。要打印某个函数,可以是:l function_name。要打印某个成员函数:l classname::memfunc。
结束调试程序
kill
结束语
附上一些资源,供向我这样的初学者参考:
新手入门之GDB调试的更多相关文章
- 一文入门Linux下gdb调试(二)
作者:良知犹存 转载授权以及围观:欢迎添加微信号:Conscience_Remains 总述 今天我们介绍一下core dump文件,Core dump叫做核心转储,它是进程运行时在突然崩溃的 ...
- Linux gdb调试入门
没有使用过gdb调试过程序的觉得gdb是个很神奇的东东,如果你使用它调试一次保证你想忘记它都难,下面看看它的庐山真面目吧! GDB概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具. ...
- gdb 调试入门,大牛写的高质量指南
引用自:http://blog.jobbole.com/107759/ gdb 调试 ncurses 全过程: 发现网上的“gdb 示例”只有命令而没有对应的输出,我有点不满意.gdb 是 GNU 调 ...
- linux程序调试命令addr2line之入门简单介绍(本文先不聊gdb调试)
addr2line有什么作用呢? 可别小瞧它, 它能够定位到代码出错的位置. 以下, 我们来看看这个简单的代码: #include <stdio.h> int main() { int * ...
- gdb调试入门(上)
一.什么是gdb:gdb是GNU debugger的缩写,是编程调试工具二.gdb功能:1.启动程序,可根据用户要求随心所欲的运行程序(比如带参数)2.可让被调试的程序在用户指定的调试的断点处停住3. ...
- gdb调试入门(下)
GDB调试主要包括: 1.查看运行时数据 2.程序错误 3.gdb调试逻辑错误 4.gdb调试段错误 5.core文件调试 一.查看运行时数据 1.print 查看变量值 2.ptype 变量: 查看 ...
- 一文入门Linux下gdb调试(一)
作者:良知犹存 转载授权以及围观:欢迎添加微信号:Conscience_Remains 总述 在window下我们习惯了IDE的各种调试按钮,说实话确实挺方便的,但到了Linux下,没有那么多的IDE ...
- GDB调试-从入门到实践
你好,我是雨乐! 在上篇文章中,我们分析了线上coredump产生的原因,其中用到了coredump分析工具gdb,这几天一直有读者在问,能不能写一篇关于gdb调试方面的文章,今天借助此文,分享一些工 ...
- gdb调试快速入门
编译指令 gcc test.c -o test -g -g是加入调试信息,加入源码信息 启动gdb调试 gdb test 进入gdb中 设置参数 set args 10 20 显示参数show age ...
随机推荐
- ScrollView和listview的冲突问题,关于宽度,和滑动
只需要重新listview即可 package com.exmple.listscrow; import java.util.logging.LogManager; import android.co ...
- php中curl模拟浏览器来传输数据
cURL可以使用URL的语法模拟浏览器来传输数据, 因为它是模拟浏览器,因此它同样支持多种协议,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以 ...
- ajax 代码
function ajax(){ var aj=null; if(window.ActiveXObject){ aj = new ActiveXObject("Microsoft.XMLHT ...
- elasticsearch之python备份
一:elasticsearch原理 Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎.无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进.性能最好的.功 ...
- [问题2014A02] 解答二(求和法+拆分法,由张诚纯同学提供)
[问题2014A02] 解答二(求和法+拆分法,由张诚纯同学提供) 将行列式 \(|A|\) 的第二列,\(\cdots\),第 \(n\) 列全部加到第一列,可得 \[ |A|=\begin{vma ...
- ubuntu如何以删除文件夹?
rm [选项] 文件 -f, --force 强力删除,不要求确认 -i 每删除一个文件或进入一个子目录都要求确认 -I 在删除超过三个文件或者递归删除前要求确认 -r, -R 递归删除子目录 -d, ...
- 。linux中swap分区
1.swap分区的最重要的作用是防止网站流量突然增大而导致系统分配内存不够用而死机. 2.使用swap交换分区,会使服务器的性能降低很多,导致访问速度变慢. 3.交换分区.我们如果没有足够的内存,也许 ...
- Adobe Edge Animate CC 不再开发更新!
Adobe Edge Animate CC停止开发更新! http://blogs.adobe.com/edge/2015/11/30/update-about-edge-tools-services ...
- 《BI项目笔记》创建计算成员
也可以利用脚本来生成计算成员
- nodejs 访问mysql
安装 $ npm install mysql 简介 这个一个mysql的nodejs版本的驱动,是用JavaScript来编写的.不需要编译 这儿有个例子来示范如何使用: var mysql = re ...