gdb 调试程序
要调试生成的可执行程序,必须在生成的时候加入-g选项,生成可以调试的代码
例如:gcc -o test a.c b.c -g
这样gcc就会在链接的时候加入一些用于调试的符号
在生成可以调试的可执行程序后,使用gdb命令进入调试模式
root@ubuntu:/home/leo/test/project/classes# gdb test
GNU gdb (Ubuntu 7.10-1ubuntu2) 7.10
Copyright (C) Free Software Foundation, Inc.
License GPLv3+: GNU GPL version or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from test...done.
(gdb)
此时,程序并没有开始运行,在运行程序之前,可以做一些准备工作
1. 设置运行参数
(gdb) set args 5 设置第一个参数为5
(gdb) show args
Argument list to give program being debugged when it is started is "5".
2. 设置断点,break命令,简写b
在指定行数设置断点
(gdb) b 8 在第8行设置断点
Breakpoint at 0x4004f0: file main.cpp, line .
(gdb)
为指定函数设置断点
(gdb) b add_int
Breakpoint at 0x400660: file math/add_int.cpp, line .
在指定行数或函数设置条件变量
(gdb) b add_int if num1 ==
Breakpoint at 0x400660: file math/add_int.cpp, line .
查看断点
(gdb) info breakpoints
Num Type Disp Enb Address What
breakpoint keep y 0x0000000000400660 in add_int(int, int)
at math/add_int.cpp:
stop only if num1 ==
breakpoint already hit time
禁用断点 disable b 4,禁用4号断点
启动断点 enable b 4,启用4号断点
删除断点 clear 51 删除51行的断点
3. 查看源文件,list命令,简写l
(gdb) list
#include "stdlib.h"
#include "stdio.h" int add_int(int, int);
float add_float(float, float); int main(int argc, char *argv[])
{
int value = (*argv[]) - '';
printf("Leo is here %d . \n", value);
(gdb) list int num1 = add_int(, );
float num2 = add_float(2.3, 4.5);
printf("result is %d %f.", num1, num2); getchar(); return ;
}
(gdb) list
Line number out of range; main.cpp has lines.
(gdb)
也可以指定查看的行数list 5,,10,查看从5到10行的源代码
做好准备工作之后,就可以真正运行程序了
4. 运行程序,run命令,简写r
(gdb) b
Breakpoint at 0x4004f0: file main.cpp, line .
(gdb) run 5 可以直接在run后面可以跟运行参数,也可以用set设置运行参数
Starting program: /home/leo/test/project/classes/test Breakpoint , main (argc=, argv=0x7fffffffe018) at main.cpp:
{
(gdb)
5. 查看变量,display命令。在使用断点命令后,在运行到断点处,就可以使用此命令查看变量得值了
(gdb) b
Breakpoint at 0x4004f0: file main.cpp, line .
(gdb) run
Starting program: /home/leo/test/project/classes/test Breakpoint , main (argc=, argv=0x7fffffffe018) at main.cpp:
{
(gdb) display argc 查看运行参数个数
: argc =
(gdb) display argv[] 查看第一个运行参数的值
: argv[] = 0x7fffffffe38b ""
(gdb)
6. 继续执行,continue命令,简写c
(gdb) b
Breakpoint at 0x4004f0: file main.cpp, line .
(gdb) run
Starting program: /home/leo/test/project/classes/test Breakpoint , main (argc=, argv=0x7fffffffe018) at main.cpp:
{
(gdb) c
Continuing.
Leo is here .
result is 6.800000.
[Inferior 1 (process 4009) exited normally]
7. 修改变量的值,set命令
(gdb) b
Breakpoint at 0x4004f0: file main.cpp, line .
(gdb) run
Starting program: /home/leo/test/project/classes/test Breakpoint , main (argc=, argv=0x7fffffffe018) at main.cpp:
{
(gdb) display argv[]
: argv[] = 0x7fffffffe38b ""
(gdb) set argv[] = "" 将第一个运行参数的值从字符串“7”改为“8”
(gdb) c
Continuing.
Leo is here .
result is 6.800000.
[Inferior 1 (process 4009) exited normally]
8. 退出调试,q命令
(gdb) q
A debugging session is active. Inferior [process ] will be killed. Quit anyway? (y or n) y
9. 查看变量类型,whatis命令
(gdb) whatis num1
type = int
(gdb)
10. 查看结构详细定义,ptype命令
(gdb) ptype u
type = struct User {
int id
char name[]
}
10. 进入函数体(step,简写s)和单步调试命令(next,简写n)
(gdb) s
}: num2 =
: num1 =
(gdb) n
main (argc=<optimized out>, argv=<optimized out>) at main.cpp:
float num2 = add_float(2.3, 4.5);
(gdb)
11. 查看调用堆栈(backtrace,简写bt)
(gdb) bt
# add_int (num1=num1@entry=, num2=num2@entry=) at math/add_int.cpp:
# 0x000000000040051b in main (argc=<optimized out>, argv=<optimized out>)
at main.cpp:
(gdb)
12. 获取当前断点下的运行情况(info)
13. 多线程调试
info thread: 获取当前进程中所有线程信息;
thread thread_id: 进入指定的线程进行调试;
14. 打印指定函数的汇编代码
disassamble sum
15. 帮助信息
help
gdb 调试程序的更多相关文章
- 用GDB调试程序(一)
http://blog.csdn.net/haoel/article/details/2879 用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或 ...
- Linux下使用GDB调试程序
问题描述: Linux下使用GDB调试程序 问题解决: (1)生成调试文件 注: 使用命令 gdb IOStream.c -o IOStre ...
- 用gdb调试程序笔记: 以段错误(Segmental fault)为例
用gdb调试程序笔记: 以段错误(Segmental fault)为例[转] 1.背景介绍2.程序中常见的bug分类3.程序调试器(如gdb)有什么用4.段错误(Segmental fault)介绍5 ...
- 用GDB调试程序
转自:http://blog.csdn.net/haoel/article/details/2879 是一篇从基础讲gdb的博文 用GDB调试程序 GDB概述---- GDB是GNU开源组织发布的一个 ...
- gdb调试程序函数名为问号,什么原因?step by step解决方案
gdb调试程序函数名为问号,什么原因? http://bbs.chinaunix.net/thread-1823649-1-1.html http://www.bubuko.com/infodetai ...
- 用gdb调试程序(Linux环境)
一般来说,GDB主要帮忙你完成下面四个方面的功能: 1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序. 2.可让被调试的程序在你所指定的调置的断点处停住.(断点可以是条件表达式) ...
- [Z] 用GDB调试程序
原文:http://blog.csdn.net/haoel/article/details/2879 用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工 ...
- 用 GDB 调试程序
Linux 包含了一个叫 gdb 的 GNU 调试程序. gdb 是一个用来调试 C 和 C++ 程序的强力调试器. 它使你能在程序运行时观察程序的内部结构和内存的使用情况. 以下是 gdb 所提供的 ...
- 转载 gdb调试程序
转载自csdn,作者haoel,链接http://blog.csdn.net/haoel/article/details/2879 用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一 ...
- Linux高级编程--04.GDB调试程序(查看数据)
查看栈信息 当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的.当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入"栈"(Stack)中.你可以用 ...
随机推荐
- 在VS2013中使用Log4net
大致分为3个步骤 引用Log4net
- window.onload与$(document).ready()区别
2013-12-08 17:11:34 window.onload一次只能执行一个程序,而$(document).ready()可以按照先后顺序执行多个程序. eg: function one(){ ...
- MYCAT介绍(转)
从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个M ...
- HoloLens模拟器仿真器与文档现已向开发者们开放
HoloLens仿真器与文档现已向开发者们开放 直接上链接吧:http://mt.sohu.com/20160301/n438961462.shtml
- nginx下rewrite参数超过9个的解决方法
nginx 在处理多于9个参数的时候,是采用重命名的方法来实现的: /?m?([0-9,]*)h?(\d*)a?([0-9,]*)c?(\d*)s?(x?f?(?P<f>[0-9,]*)/ ...
- npm镜像
npm config set registry https://registry.npm.taobao.org // 配置后可通过下面方式来验证是否成功 npm config get registry ...
- Install CentOS 7 on Thinkpad t430
- BIOS settings: - Thinkpadt430, BIOS settings: Config---------------------------- Network: wake on ...
- MySQL 使用笔记
1. How to export the database of mysql go to command line, use "CMD" cd C:\Program Files\ ...
- win10 下 gulp-sass 无法使用的解决
参考链接: http://stackoverflow.com/questions/28409100/try-reinstalling-node-sass-on-node-0-12 解决方法: npm ...
- Redis 连接问题
.NET 中使用 StackExchange.Redis 我为什么想写这个,总感觉很多介绍相应技术的博客,只是把内容从官网搬到自己的博客中,没有任何的实践,这样会给想学的人,没有任何好处,也可能我是自 ...