Linuxc - gdb调试程序
指针实现变量交换值
#include <stdio.h>
void change(int *a,int *b) {
int tmp = *a;
*a = *b;// 将指针a所在地址的值,更换为b地址的值
*b = tmp;
}
int main()
{
int a=5;
int b=3;
change(&a,&b); // 指针a获取a的地址,指针b获取b的地址
printf("num a=%d\nnum b=%d \n",a,b);
return 0;
}
让我们用gdb工具来看看其中的奥妙。
root@jiqing:~/cspace/pointer# gcc -g main.c -o main.out
生成gdb调试版本的main.out文件。
root@jiqing:~/cspace/pointer# gdb main.out
进入调试模式
(gdb) l
1 #include <stdio.h>
2 void change(int *a,int *b) {
3 int tmp = *a;
4 *a = *b;// 将指针a所在地址的值,更换为b地址的值
5 *b = tmp;
6 }
7
8 int main()
9 {
10 int a=5;
l 进行查看
(gdb) start
Temporary breakpoint 1 at 0x4005cb: file main.c, line 9.
Starting program: /root/cspace/pointer/main.out
Temporary breakpoint 1, main () at main.c:9
9 {
start 开始执行
(gdb) n
10 int a=5;
n 下一步
(gdb) n
13 change(&a,&b); // 指针a获取a的地址,指针b获取b的地址
(gdb) s
change (a=0x7fffffffe4d0, b=0x7fffffffe4d4) at main.c:3
3 int tmp = *a;
s 进入子函数
(gdb) p a
$1 = (int *) 0x7fffffffe4d0
(gdb) p b
$2 = (int *) 0x7fffffffe4d4
(gdb) p *a
$5 = 3
(gdb) p *b
$6 = 5
p 打印值。经过交换之后,a变成了3 ,b变成了5。
(gdb) q
A debugging session is active.
Inferior 1 [process 11754] will be killed.
Quit anyway? (y or n) y
q退出。
通过gdb可以一步一步的查看程序的执行情况,看到内存的值。
窥探程序执行的奥秘。
Linuxc - 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开源组织发布的一 ...
随机推荐
- CSS3 radial-gradient 径向渐变属性 实现重复半圆角内边框
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8gAAADiCAIAAAAd73mYAAAG+ElEQVR4nO3dQQrkNhCG0TntHGGu4U ...
- QCanvasItem介绍-QT3
QCanvasItem类提供一个在QCanvas上的抽象图形对象. 各种QCanvasItem子类提供立即可用的行为.这个类是一个纯粹的抽象超类,它提供了在所有具体的canvas项目类中共享的行为.Q ...
- Java基础(五)-Java序列化与反序列化
.output_wrapper pre code { font-family: Consolas, Inconsolata, Courier, monospace; display: block !i ...
- 如何在 iOS 真机运行 Appium
使用 gui 启动的 appium 1.2.2 也会有这个问题,所以你要把 deviceconsole 复制到 /Applications/Appium.app/Contents/Resources/ ...
- apache2.2版本安装说明
部署httpd服务 apache是一个模块化设计的服务,所谓的模块化就是将各个功能,特性都独立的分开,这样设计的好处是可扩展性强,各个功能之间的依赖性相对较弱,在后期修改,升级,添加新功能是非常方 ...
- instr函数的"重载"
.带两个参数的 --模糊查询,comp表的Mobel和show_name字段中含有'张' INSTR(COMP.MOBILE .带三个参数的 ) from dual; 结果: 第三个参数:从字符串&q ...
- 将控制台信息显示在前台页面的js插件
在拿出插件之前,先回顾一下apply()的用法,这里和call()做比较. JavaScript中的每一个Function对象都有一个apply()方法和一个call()方法,它们的语法分别为: /* ...
- mysql一些函数的记录
今天瞎搞还是弄不出报名程序,偶尔记住了几个mysql函数 mysql_connect()连接数据库 mysql_error()输出文本报错 mysql_select_db()函数设置活动的MySQL ...
- html笔记4
<html> <body> <p>这是列表标签</p> <ul> <li>xxx</li> </ul> ...
- cs231n spring 2017 lecture7 Training Neural Networks II 听课笔记
1. 优化: 1.1 随机梯度下降法(Stochasitc Gradient Decent, SGD)的问题: 1)对于condition number(Hessian矩阵最大和最小的奇异值的比值)很 ...