程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 調試器(GDB)的基本使用方法(之三)

調試器(GDB)的基本使用方法(之三)

編輯:關於C
值的歷史 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在啟動之前將其作為命令文件運行。 順序如下: $HOME/.gdbinit運行命令行選項./.gdbinit加載通過-x選項給出的命令文件
命令定義 用define可以自定義命令,用document可以給自定義的命令加說明,利用help 命令名可以查看定義的命令。 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)




  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved