成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux編程工具C編譯器和C編程工具GDB執行步驟

系統 Linux
本文詳細寫出了Linux編程工具C編譯器和C編程工具GDB執行時的具體代碼,并標注了具體說明,供開發者們參考.

Linux編程工具gdb 支持很多與 UNIX shell 程序一樣的命令編輯特征. 你能象在 bash 或 tcsh里那樣按 Tab 鍵讓 gdb 幫你補齊一個唯一的命令, 如果不唯一的話 gdb 會列出所有匹配的命令. 你也能用光標鍵上下翻動歷史命令.

Linux編程工具gdb 應用舉例
本節用一個實例教你一步步的用Linux編程工具gdb 調試程序. 被調試的程序相當的簡單, 但它展示了Linux編程工具gdb 的典型應用.
下面列出了將被調試的程序. 這個程序被稱為 hello , 它顯示一個簡單的問候, 再用反序將它列出.
#include
static void my_print (char *);
static void my_print2 (char *);
main ()
{
char my_string[] = "hello world!";
my_print (my_string);
my_print2 (my_string);
}
void my_print (char *string)
{
printf ("The string is %s ", string);
}
void my_print2 (char *string)
{
char *string2;
int size, i;
size = strlen (string);
string2 = (char *) malloc (size + 1);
for (i = 0; i < size; i++)
string2[size - i] = string[i];
string2[size+1] = '';
printf ("The string printed backward is %s ", string2);
}

用下面的命令編譯它:
gcc -g -o hello hello.c
這個程序執行時顯示如下結果:
./hello
The string is hello world!
The string printed backward is

輸出的***行是正確的, 但第二行打印出的東西并不是我們所期望的. 我們所設想的輸出應該是:
The string printed backward is !dlrow olleh
由于某些原因, my_print2 函數沒有正常工作. 讓我們用 gdb 看看問題究竟出在哪兒, 先鍵入如下命令:
gdb hello
如果你在輸入命令時忘了把要調試的程序作為參數傳給 gdb , 你可以在 gdb 提示符下用 file 命令來載入它:
(gdb) file hello
這個命令將載入 hello 可執行文件就象你在 gdb 命令行里裝入它一樣.
這時你能用 gdb 的 run 命令來運行 hello 了. 當它在 gdb 里被運行后結果大約會象這樣:
(gdb) run
Starting program: /root/hello
The string is hello world!
The string printed backward is
Program exited with code 040
這個輸出和在Linux編程工具gdb 外面運行的結果一樣. 問題是, 為什么反序打印沒有工作? 為了找出癥結所在, 我們可以在 my_print2 函數的 for 語句后設一個斷點, 具體的做法是在 gdb 提示符下鍵入 list 命令三次, 列出源代碼:
(gdb) list
(gdb) list
(gdb) list

***次鍵入 list 命令的輸出如下:
#include
static void my_print (char *);
static void my_print2 (char *);
main ()
{
char my_string[] = "hello world!";
my_print (my_string);
my_print2 (my_string);

再按一次回車將列出 hello 程序的剩余部分:

根據列出的源程序, 你能看到要設斷點的地方在第26行, 在 gdb 命令行提示符下鍵入如下命令設置斷點:
(gdb) break 26
gdb 將作出如下的響應:
Breakpoint 1 at 0x804857c: file hello.c, line 26.
(gdb)
現在再鍵入 run 命令, 將產生如下的輸出:
Starting program: /root/hello
The string is hello world!
Breakpoint 1, my_print2 (string=0xbffffab0 "hello world!") at hello.c:26
26 string2[size - i] = string[i];

你能通過設置一個觀察 string2[size - i] 變量的值的觀察點來看出錯誤是怎樣產生的, 做法是鍵入:
(gdb) watch string2[size - i]
gdb 將作出如下回應:
Hardware watchpoint 2: string2[size - i]
現在可以用 next 命令來一步步的執行 for 循環了:
(gdb) next
經過***次循環后, gdb 告訴我們 string2[size - i] 的值是 `h`. gdb 用如下的顯示來告訴你這個信息:
Hardware watchpoint 2: string2[size - i]
Old value = 0 '00'
New value = 104 'h'
my_print2 (string=0xbffffab0 "hello world!") at hello.c:25
25 for (i = 0; i < size; i++)
這個值正是期望的. 后來的數次循環的結果都是正確的. 當 i=11 時, 表達式 string2[size - i] 的值等于 `!`, size - i 的值等于 1, ***一個字符已經拷到新串里了.

如果你再把循環執行下去, 你會看到已經沒有值分配給 string2[0] 了, 而它是新串的***個字符, 因為 malloc 函數在分配內存時把它們初始化為空(null)字符. 所以 string2 的***個字符是空字符. 這解釋了為什么在打印 string2 時沒有任何輸出了.

現在找出了問題出在哪里, 修正這個錯誤是很容易的. 你得把代碼里寫入 string2 的***個字符的的偏移量改為 size - 1 而不是 size. 這是因為 string2 的大小為 12, 但起始偏移量是 0, 串內的字符從偏移量 0 到 偏移量 10, 偏移量 11 為空字符保留.

【編輯推薦】

  1. 詳解Linux開發領域
  2. 騰訊Linux QQ團隊現招聘:Linux開發與測試工程師
  3. 英特爾欲借基于Linux開發Moblin挑戰微軟
  4. 開源大師齊聚京城 Linux開發者研討會開幕
  5. Linux開發現狀的“天氣預報”
責任編輯:chenqingxiang
相關推薦

2010-05-28 14:55:17

Linux編程工具

2010-06-04 17:37:45

Linux編程工具

2010-06-04 17:48:20

Linux編程工具

2011-04-08 17:24:05

c++工具編程

2009-08-10 17:12:54

C#編譯器

2010-05-28 14:14:37

Linux開發工具

2010-01-18 10:34:21

C++編譯器

2010-01-21 09:11:38

C++編譯器

2009-08-25 17:13:57

C#串口編程

2019-08-06 08:20:07

編譯器工具開發者

2009-08-06 14:59:36

C#編譯器

2010-01-18 10:28:15

C++編譯器

2013-12-10 10:53:47

shellcode

2009-08-14 11:34:26

Mono C#編譯器

2020-10-26 11:33:45

編程語言編譯器軟件

2010-06-09 17:48:15

Linux 編程工具

2010-01-27 13:53:40

強大的CC++編譯器

2010-06-03 13:01:25

Linux 編程工具

2010-01-11 10:01:25

C++的編程工具

2021-12-23 23:11:37

C語言編程工具
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费a国产 | 91视视频在线观看入口直接观看 | 国产免费一级片 | 天天影视综合 | 中文字幕日韩欧美一区二区三区 | 羞羞视频在线观看 | 国产中文一区二区三区 | 亚洲精品国产成人 | 亚洲人成一区二区三区性色 | 久久精品91久久久久久再现 | 国产日韩欧美精品一区二区 | 在线成人免费视频 | 男女又爽又黄视频 | 成人在线a | av激情在线 | 天天夜夜操 | 欧美日韩综合视频 | 在线观看免费黄色片 | 国产精品99久久久久久动医院 | 亚洲高清免费视频 | 亚洲aⅴ一区二区 | 国产99久久精品一区二区永久免费 | 91精品久久久久久久久久入口 | 国产欧美一级 | 奇色影视| 亚洲视频免费观看 | 狠狠干天天干 | 精品久久久久久亚洲精品 | 成人精品毛片 | 99看片网| 亚洲精品一 | 在线看片网站 | 91社区在线观看高清 | 国产午夜精品久久久久免费视高清 | 欧美bondage紧缚视频 | 四虎影院免费在线播放 | 一区二区中文字幕 | 日本超碰在线 | 日韩二区三区 | 一区二区三区免费在线观看 | 黄色片大全在线观看 |