青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

EverSpring working shop

To pursue creative ideas based on nature.

統計

留言簿(1)

他山之石

閱讀排行榜

評論排行榜

GDB Tutorial for beginners (From network, i am reading also.)

QUOTE

      The  purpose  of a debugger such as GDB is to allow you to see what is
      going on ‘‘inside’’ another program while it executes—or what  another
      program was doing at the moment it crashed.
                                                                               
      GDB  can do four main kinds of things (plus other things in support of
      these) to help you catch bugs in the act:
                                                                               
          ·  Start your program, specifying anything that might  affect  its
              behavior.
                                                                               
          ·  Make your program stop on specified conditions.
                                                                               
          ·  Examine what has happened, when your program has stopped.
                                                                               
          ·  Change  things in your program, so you can experiment with cor-
              recting the effects of  one  bug  and  go  on  to  learn  about
              another.
--GDB Manpage


The first thing you need to do to start debugging your program is to compile it with debugging symbols, this is accomplished with the -g flag:
gcc filename.c -g -o filename
g++ filename.cpp -g -o filename


Lets start with a simple program that gets a line of text from the user, and prints it out backwards to the screen:


CODE

#include <stdio.h>
                                                                                                                                                             
int main(){

char input[50];
int i=0;

scanf("%s",input);

for(i=strlen(input);i>=0;i--)
   { printf("%c",input[i]);}
printf("\n");

return 0;
}



compile and start the debugger with:
gcc -g debug.c
gdb ./a.out

You should now be in the debugger.


There are 8 main commands that you will mostly be using in your debugging session

1.) break
2.) run
3.) print
4.) next
5.) step
6.) continue
7.) display
8.) where



1.) The Break Command:
gdb will remeber the line numbers of your source file. This will let us easily set up break points in the program. A break point, is a line in the code where you want execution to pause. Once you pause execution you will be able to examine variables, and walk through the program, and other things of that nature.
Continueing with our example lets set up a break point at line 6, just before we declare int i=0;

QUOTE

(gdb) break 6
Breakpoint 1 at 0x80483ec: file debug.c, line 6.
(gdb)




2.) The Run Command
Run will begin inital execution of your program. This will run your program as you normally would outside of the debugger, until it reaches a break point line.
At this moment, you will have been returned to the gdb command prompt.
(Using run again after your prgram has been started, will ask to terminate the current execution and start over)

From our example:

QUOTE

(gdb) run
Starting program: /u/khan/tmp/a.out
                                                                               
Breakpoint 1, main () at debug.c:6
6      int i=0;
(gdb)



3.)The Print Command
Print will let you see the values of data in your program. It takes an argument of the variable name.
In our example, we are paused right before we declare and intitalize i. Lets look what the value of i is now:

QUOTE

(gdb) print i
$1 = -1075457232
(gdb)


i contains junk, we havent put anything into it yet.


4. & 5.) Next and Step
Next and Step do basically the same thing, step line by line through the program. The difference is that next steps over a function call, and step will step into it.

Now in our example, we will step to the beginning of the next instruction

QUOTE

(gdb) step
8      scanf("%s",input);
(gdb)


before we execute the scanf, lets check the value of i again:
QUOTE
(gdb) print i
$2 = 0
(gdb)


i is now equal to 0, like it should be.

Now lets use next to move into the scanf statement:
QUOTE

(gdb) next


What happened here? We werent returned to the gdb prompt. Well the program is inside scanf, waiting for us to input something.
Input string here, and press enter:


6.) The Continue Command
Continue will pick up execution of the program after it has reached a break point.

Lets continue to the end of the program now:
QUOTE

(gdb) continue
Continuing.
tupni

Program exited normally.
(gdb)


Here we've reached the end of our program, you can see that it printed in resevese "input" which was what I fed it in scanf.


7.) The Display Command
display will show a vaiables contents each step of the way in your program. Lets start over in our example. Delete the breakpoint at line 6
QUOTE

(gdb) del break 1

This deletes our first breakpoint at line 6.

Now lets set a new breakpoint at line 11, the printf statement inside the for loop
QUOTE

(gdb) break 11
Breakpoint 3 at 0x8048421: file debug.c, line 11.
(gdb)


Run the program again, and enter the input, when it returns to the gdb command prompt we will display input[i] and watch it through the for loop

QUOTE

Breakpoint 3, main () at debug.c:11
11      { printf("%c",input[i]);}
(gdb) display input[i]
1: input[i] = 0 '\0'
(gdb) next
10      for(i=strlen(input);i>=0;i--)
1: input[i] = 0 '\0'
(gdb) next

Breakpoint 3, main () at debug.c:11
11      { printf("%c",input[i]);}
1: input[i] = 116 't'
(gdb) next
10      for(i=strlen(input);i>=0;i--)
1: input[i] = 116 't'
(gdb) next

Breakpoint 3, main () at debug.c:11
11      { printf("%c",input[i]);}
1: input[i] = 117 'u'
(gdb) next
10      for(i=strlen(input);i>=0;i--)
1: input[i] = 117 'u'
(gdb) next

Breakpoint 3, main () at debug.c:11
11      { printf("%c",input[i]);}
1: input[i] = 112 'p'
(gdb) next
10      for(i=strlen(input);i>=0;i--)
1: input[i] = 112 'p'
(gdb) next

Breakpoint 3, main () at debug.c:11
11      { printf("%c",input[i]);}
1: input[i] = 110 'n'
(gdb) next
10      for(i=strlen(input);i>=0;i--)
1: input[i] = 110 'n'
(gdb) next

Breakpoint 3, main () at debug.c:11
11      { printf("%c",input[i]);}
1: input[i] = 105 'i'
(gdb) next
10      for(i=strlen(input);i>=0;i--)
1: input[i] = 105 'i'
(gdb) next
12      printf("\n");
1: input[i] = -1 '\uffff'
(gdb)

Here we stepped through the loop, always looking at what input[i] was equal to.


9.)The Where Command
The where command prints a backtrace of all stack frames. This may not make much since but it is useful in seeing where our program crashes.

Lets modify our program just a little so that it will crash:
CODE

#include <stdio.h>
                                                                                                                                                             
int main(){

char *input;
int i=0;

scanf("%s",input);

for(i=strlen(input);i>=0;i--)
   { printf("%c",input[i]);}
printf("\n");

return 0;
}


Here we've changed input to be a pointer to a char.

Recompile and run gdb on it again.

and see what happens when it crashes

QUOTE


(gdb) r
Starting program: /u/khan/tmp/a.out
AAA

Program received signal SIGSEGV, Segmentation fault.
0x009ef267 in _IO_vfscanf_internal () from /lib/tls/libc.so.6
(gdb) where
#0  0x009ef267 in _IO_vfscanf_internal () from /lib/tls/libc.so.6
#1  0x009f3808 in scanf () from /lib/tls/libc.so.6
#2  0x08048403 in main () at debug.c:8
(gdb)



We see at the bottom, three frames,
#2, the top most shows where we crashed at.

use the up command to move up the stack
QUOTE

(gdb) up
#1  0x009f3808 in scanf () from /lib/tls/libc.so.6
(gdb) up
#2  0x08048403 in main () at debug.c:8
8      scanf("%s",input);
(gdb)

Here we see line #8
8 scanf("%s",input);

The line we crashed at.




These are the basics to gdb, you can now find where a program crashed, watch variables, and step through line by line of your program.

For more info check out the info page
info gdb

posted on 2007-10-12 22:02 everspring79 閱讀(874) 評論(0)  編輯 收藏 引用 所屬分類: Tools

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产一区二区三区久久| 亚洲电影免费| 欧美日韩一区二区国产| 欧美激情导航| 国产精品久久久久久久久久久久| 国产精品二区三区四区| 亚洲欧美日韩一区二区三区在线观看 | 美女主播一区| 欧美三级网页| 亚洲国产精品va在看黑人| 亚洲精品久久久久久久久久久 | 国产精品素人视频| 伊人激情综合| 一区二区三区www| 久久一区精品| 亚洲精品人人| 久久精品国产一区二区三区免费看| 久久综合久久88| 国产精品久久久久久久9999| 午夜精品久久久久久久99热浪潮| 先锋影院在线亚洲| 亚洲激情自拍| 久久久久久欧美| 国产美女扒开尿口久久久| 99re热这里只有精品视频 | 亚洲高清不卡在线| 亚洲精品一区二区网址| 国产精品视频网| 欧美黄色大片网站| 欧美一区二区三区视频免费播放 | 亚洲欧美视频一区二区三区| 老色批av在线精品| 99热这里只有成人精品国产| 欧美在线综合视频| 亚洲一区二区精品在线| 欧美巨乳在线观看| 亚洲精品一二| 午夜在线视频观看日韩17c| 国产精品久久久久国产a级| 久久在线播放| 国产精品美腿一区在线看| 在线亚洲精品福利网址导航| 欧美一区二区三区在线看| 亚洲精品综合久久中文字幕| 亚洲国产日韩在线一区模特| 老司机精品福利视频| 先锋资源久久| 欧美日韩视频一区二区| 噜噜噜噜噜久久久久久91| 午夜日韩在线| 亚洲一本大道在线| 亚洲欧美乱综合| 国产视频亚洲精品| 久久裸体艺术| 久久国产精品一区二区| 影音先锋亚洲精品| 午夜精品久久久久久久久久久久久 | 亚洲视频狠狠| 亚洲自拍偷拍网址| 亚洲影视综合| 在线观看欧美成人| 在线观看成人网| 欧美成人午夜77777| 久久超碰97人人做人人爱| 午夜精品一区二区三区在线播放| 欧美精品久久99| 香蕉乱码成人久久天堂爱免费| 欧美人成在线| 日韩亚洲成人av在线| 国产精品久久久一区二区三区| 亚洲精品乱码久久久久久黑人| 国产精品白丝jk黑袜喷水| 久久久久久久波多野高潮日日| 久久精品人人爽| 久久综合网络一区二区| 国语自产在线不卡| 亚洲日产国产精品| 一区二区国产在线观看| 欧美日本韩国一区| 一本色道久久| 精品成人一区| 日韩一级欧洲| 亚洲欧美区自拍先锋| 国产精品日本欧美一区二区三区| 亚洲欧美日本日韩| 久久久www免费人成黑人精品 | 国产九九视频一区二区三区| 亚洲欧美精品一区| 久热国产精品| 亚洲日本中文字幕免费在线不卡| 欧美人成在线视频| 亚洲免费网址| 欧美a一区二区| 国产精品一区在线播放| 久久精品综合一区| 亚洲第一天堂无码专区| 亚洲欧美成人| 激情综合久久| 欧美视频在线观看视频极品| 欧美制服丝袜| 欧美一级夜夜爽| 亚洲电影免费观看高清完整版在线观看 | 国产自产2019最新不卡| 一本色道久久加勒比精品| 久久久久久夜| 亚洲精品网站在线播放gif| 国产精品视频一二三| 葵司免费一区二区三区四区五区| 亚洲精品欧美在线| 久久蜜臀精品av| 在线一区二区三区四区| 精品成人在线| 国产精品女人毛片| 免费观看在线综合| 欧美激情一区二区三区| 午夜精品一区二区在线观看 | 欧美日韩麻豆| 久久亚洲国产精品日日av夜夜| 久久久999国产| 亚洲午夜精品17c| 在线观看国产日韩| 国产日韩欧美在线播放不卡| 欧美日韩1区2区3区| 一本一本久久a久久精品综合妖精| 久久亚洲影音av资源网| 亚洲一区在线播放| 99精品免费视频| 亚洲高清免费视频| 国内在线观看一区二区三区| 欧美日韩在线精品一区二区三区| 久久亚洲精品一区| 欧美怡红院视频| 亚洲一区在线播放| 99国产精品国产精品久久| 亚洲一区一卡| 99ri日韩精品视频| 亚洲美女av黄| 亚洲精品一区二| 亚洲国产精品激情在线观看| 狠狠入ady亚洲精品经典电影| 国产精品女主播在线观看 | 香蕉乱码成人久久天堂爱免费| 99精品欧美| 亚洲免费久久| 亚洲美女色禁图| 亚洲精品偷拍| 艳女tv在线观看国产一区| 亚洲精品一区二区三区四区高清| 亚洲欧洲精品一区二区精品久久久| 女人色偷偷aa久久天堂| 玖玖玖国产精品| 欧美国产高清| 亚洲人成在线观看网站高清| 亚洲国产精品va| 亚洲精品视频在线观看网站| 一本久道久久久| 亚洲一区二区免费在线| 新狼窝色av性久久久久久| 午夜精品亚洲| 久热精品视频在线免费观看| 免费成人在线观看视频| 欧美福利电影网| 欧美性久久久| 国产欧美日韩在线视频| 欧美精品九九99久久| 欧美日韩亚洲视频| 国产精品久久久久高潮| 国产亚洲制服色| 1024国产精品| 妖精成人www高清在线观看| 亚洲专区欧美专区| 欧美在线观看视频一区二区三区| 99精品99| 欧美专区日韩专区| 蜜桃av一区二区在线观看| 欧美在线视频在线播放完整版免费观看| 欧美在线综合视频| 欧美激情国产日韩精品一区18| 一本到12不卡视频在线dvd| 欧美一级大片在线观看| 欧美国产免费| 国产美女精品视频免费观看| 亚洲二区在线观看| 亚洲免费视频观看| 欧美国产成人在线| 亚洲影院在线观看| 欧美多人爱爱视频网站| 欧美成人精品一区| 国产精品久久久久国产a级| 亚洲电影免费在线| 午夜电影亚洲| 亚洲国产精品久久久久| 午夜久久久久久| 欧美日韩国产综合视频在线观看中文 | 国产性色一区二区| 亚洲最新视频在线| 美女久久一区| 欧美一区二区成人| 欧美日韩三区| 日韩午夜在线播放|