调试器（GDB）的基本使用方法（之三）

print命令显示过的值会被记录下来，这些值可以其他表达式中使用。

/* Filename:        contains3.c
* Description:      用来计算从1～1000的数中有多少个含有3的数。
* Author:            Howard
* Date  :             2013-12-05
* Modified Date：2013-12-06
* Version:            v1.1
*/

#include <stdio.h>

void solve()
{
int i = 0;             /*1=<i<=1000*/
int j = 0;             /*控制输出个数为10时换行*/
int count = 0;         /*计数符合要求的数的个数*/
int one, two, three;   /*one(百位) two(十位) three(个位)*/

for (i=1; i<=1000; i++){
one   = i/100;
two   = i%100/10;
three = i%10;
if (3==one || 3==two || 3==three){
j ++;
count ++;
printf("%4d", i);
}
if (10==j){
j = 0;
printf("\n");
}
}
printf("\n总数为：%4d\n", count);
}

int main(int argc, char *argv[])
{
solve();
return 0;
}

(gdb) b main
Breakpoint 1 at 0x8048380: file contains3.c, line 35.
(gdb) b 14
Breakpoint 2 at 0x804845e: file contains3.c, line 14.
(gdb) b 31
Breakpoint 3 at 0x8048524: file contains3.c, line 31.
(gdb) r
Starting program: /home/shuaihua/CLan/contains3

Breakpoint 1, main (argc=1, argv=0xbffff324) at contains3.c:35
35     {
(gdb) p argc
$1 = 1 (gdb) p$
$2 = 1 (gdb) P $$3 = 1 (gdb) show value 1 = 1 2 = 1 3 = 1 (gdb) 值的历史的访问变量和说明  变量 说明 值历史中的最后一个值 n 值历史的第n个值$$ 值历史的倒数第二个值$$n 值历史的倒数第n个值$_ x命令显示过的最后的地址 $__ x命令显示过的最后的地址的值$_exitcode 调试中的程序的返回代码 $bpnum 最后设置的断点的编号 变量 可以随意定义变量。变量以$开头，有英文和数字组成
(gdb) set $abc=100 (gdb) p$abc
$4 = 100 命令历史 默认历史命令存放在./.gdb_history中。 (gdb) show history expansion: History expansion on command input is off. filename: The filename in which to record the command history is "/home/<username>/CLan/.gdb_history". save: Saving of the history record on exit is off. size: The size of the command history is 256. 格式： set history expansion show history expansion (gdb) set history expansion (gdb) show history expansion History expansion on command input is on. (gdb) show history expansion: History expansion on command input is on. filename: The filename in which to record the command history is "/home/<username>/CLan/.gdb_history". save: Saving of the history record on exit is off. size: The size of the command history is 256. 可将命令历史保存到文件中，可以通过环境变量GDBHISTFILE改变默认文件： 格式： set history filename 文件名 show history filename 启用命令历史保存到文件和恢复的功能： 格式： set history save show history save 设置保存到命令历史中的命令数量，默认为256。 格式： set history size 数字 show history size (gdb) set history save (gdb) show history save Saving of the history record on exit is on. (gdb) set history size 512 (gdb) show history size The size of the command history is 512. (gdb) show history expansion: History expansion on command input is on. filename: The filename in which to record the command history is "/home/shuaihua/CLan/.gdb_history". save: Saving of the history record on exit is on. size: The size of the command history is 512. 初始化文件（.gdbinit） Linux下gdb初始化文件为.gdbinit。如果存在.gdbinit文件，GDB在启动之前将其作为命令文件运行。 顺序如下： 1.$HOME/.gdbinit
2. 运行命令行选项
3. ./.gdbinit
4. 加载通过-x选项给出的命令文件

define格式：
define 命令名
命令
…………
end

document格式：
document 命令名
说明
end

help格式：
help 命令名

(gdb) define lsi
Type commands for definition of "lsi".
End with a line saying just "end".
>x/15i $pc >end (gdb) document lsi Type documentation for "lsi". End with a line saying just "end". >list machine instructions >15 >end (gdb) lsi => 0x8048380 <main>: push %ebp 0x8048381 <main+1>: mov %esp,%ebp 0x8048383 <main+3>: and$0xfffffff0,%esp
0x8048386 <main+6>:     call   0x8048450 <solve>
0x804838b <main+11>:     xor    %eax,%eax
0x804838d <main+13>:     leave
0x804838e <main+14>:     ret
0x804838f:     nop
0x8048390 <_start>:     xor    %ebp,%ebp
0x8048392 <_start+2>:     pop    %esi
0x8048393 <_start+3>:     mov    %esp,%ecx
0x8048395 <_start+5>:     and    $0xfffffff0,%esp 0x8048398 <_start+8>: push %eax 0x8048399 <_start+9>: push %esp 0x804839a <_start+10>: push %edx (gdb) help lsi list machine instructions 15 (gdb) 版权声明：本文为博主原创文章，未经博主允许不得转载。 • 本文已收录于以下专栏： 相关文章推荐 调试器（GDB）的基本使用方法（之二） attach到进程 使用的文件： /*filename: test_attach.c *description: This file used to test the attach comman... • cnxxrj • 2013年12月06日 08:09 • 1383 调试器（GDB）的基本使用方法（之一） 使用gcc的-g选项生成调试信息：$ gcc -Wall -O2 -g sourcefile         注意：-O2的'O'是大写字母，不是零。 编译： \$ gcc ...
• cnxxrj
• 2013年11月22日 17:01
• 1561

gdb调试器基本使用方法（入门）程序如果已经宕掉如何调试

1、gdb调试器 linux下的gdb调试器，是一款GNU组织开发并发布的UNIX/Linux下的程序调试工具，他没有图形化的友好界面，但功能强大。 bt查看函数调用的栈空间 （1）list...

GDB的基本使用方法.rar

• 2007年11月02日 21:40
• 694KB
• 下载

gdb基本使用方法

gdb基本使用方法前言程序代码中的错误可分为数类，除了最容易除错的语法错误，编译程序会告诉你错误所在外，大部分的错误都可以归类为执行时错误。GDB 的功能便是寻找执行时错误。如果没有除错程序，我们只能...
• Augusdi
• 2012年03月13日 11:06
• 545

Android调试器DDMS使用方法（Dalvik Debug Monitor Service）

DDMS 的全称是Dalvik Debug Monitor Service，它为我们提供例如：为测试设备截屏，针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收...

【Github教程】史上最全github使用方法：github入门到精通之三

GitHub已经成为的一切开放源码软件的基石。开发人员喜欢它，基于它进行协作，并不断通过它开发令人惊叹的项目。除了​​代码托管，GitHub的主要吸引力是使用它作为一个协作开发工具。在本教程中，让我们...

gdb调试工具使用方法

• 2012年08月31日 10:40
• 130KB
• 下载

举报原因： 您举报文章：调试器（GDB）的基本使用方法（之三） 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)