大家é½ç¥éå¨ Linux å¯ä»¥ç¨ gdb æ¥è°è¯åºç¨ç¨åºï¼å½ç¶åææ¯ç¨ gcc ç¼è¯ç¨åºæ¶è¦å ä¸
-g åæ°ã
æè¿ç¯æç« éå°è®¨è®ºä¸ä¸ç¨ gdb æ¥è°è¯å¨æé¾æ¥åºçé®é¢ã
é¦å
ï¼å设æ们åå¤è¿æ ·çä¸ä¸ªå¨æé¾æ¥åºï¼
QUOTE:
åºå称æ¯ï¼ ggg
å¨æé¾æ¥åºæ件åæ¯ï¼ libggg.so
头æ件æ¯ï¼ get.h
æä¾è¿æ ·ä¸¤ä¸ªå½æ°è°ç¨æ¥å£ï¼
int get ();
int set (int a);
è¦çæè¿æ ·ä¸ä¸ªå¨æé¾æ¥åºï¼æ们é¦å
ç¼åè¿æ ·ä¸ä¸ªå¤´æ件ï¼
[Copy to clipboard]
CODE:
/************å
³äºæ¬ææ¡£********************************************
*filename: get.h
*purpose: ä¸ä¸ªå¨æé¾æ¥åºå¤´æ件示ä¾
*tided by: zhoulifa() å¨ç«å ()
Linux ç±å¥½è
Linux ç¥è¯ä¼ æè
SOHO æ å¼åè
ææ
é¿ C è¯è¨
*date time: 2006-11-15 21:11:54
*Note: ä»»ä½äººå¯ä»¥ä»»æå¤å¶ä»£ç 并è¿ç¨è¿äºææ¡£ï¼å½ç¶å
æ¬ä½ çåä¸ç¨é
* ä½è¯·éµå¾ª GPL
*Hope:å¸æè¶æ¥è¶å¤ç人贡ç®èªå·±çåéï¼ä¸ºç§å¦ææ¯åå±åºå
* ç§æç«å¨å·¨äººçè©èä¸è¿æ¥æ´å¿«ï¼æè°¢æå¼æºåè¾çè´¡ç®ï¼
*æè°¢ æä¾åå§ä»£ç ï¼
æå¨ä»çåºç¡ä¸æ´çäºæ¤æ
*********************************************************************/
int get ();
int set (int a);
ç¶ååå¤è¿æ ·ä¸ä¸ªçæå¨æé¾æ¥åºçæºæ件ï¼
[Copy to clipboard]
CODE:
/************å
³äºæ¬ææ¡£********************************************
*filename: get.cpp
*purpose: ä¸ä¸ªå¨æé¾æ¥åºæºæ件示ä¾
*tided by: zhoulifa() å¨ç«å ()
Linux ç±å¥½è
Linux ç¥è¯ä¼ æè
SOHO æ å¼åè
ææ
é¿ C è¯è¨
*date time:2006-11-15 21:11:54
*Note: ä»»ä½äººå¯ä»¥ä»»æå¤å¶ä»£ç 并è¿ç¨è¿äºææ¡£ï¼å½ç¶å
æ¬ä½ çåä¸ç¨é
* ä½è¯·éµå¾ª GPL
*Hope:å¸æè¶æ¥è¶å¤ç人贡ç®èªå·±çåéï¼ä¸ºç§å¦ææ¯åå±åºå
* ç§æç«å¨å·¨äººçè©èä¸è¿æ¥æ´å¿«ï¼æè°¢æå¼æºåè¾çè´¡ç®ï¼
*æè°¢ æä¾åå§ä»£ç ï¼
æå¨ä»çåºç¡ä¸æ´çäºæ¤æ
*********************************************************************/
#include <stdio.h>
#include "get.h"
static int x=0;
int get ()
{
printf ("get x=%d\n", x);
return x;
}
int set (int a)
{
printf ("set a=%d\n", a);
x = a;
return x;
}
ç¶åæä»¬ç¨ GNU ç C/C++ ç¼è¯å¨æ¥çæå¨æé¾æ¥åºï¼ç¼è¯å½ä»¤å¦ä¸ï¼
QUOTE:
g++ get.cpp -shared -g -DDEBUG -o
libggg.so
è¿æ ·æ们就åå¤å¥½äºå¨æé¾æ¥åºäºï¼ä¸é¢æ们ç¼åä¸ä¸ªåºç¨ç¨åºæ¥è°ç¨æ¤å¨æé¾æ¥åºï¼æºä»£ç å¦ä¸ï¼
[Copy to clipboard]
CODE:
/************å
³äºæ¬ææ¡£********************************************
*filename: pk.cpp
*purpose: ä¸ä¸ªè°ç¨å¨æé¾æ¥åºç示ä¾
*tided by: zhoulifa() å¨ç«å ()
Linux ç±å¥½è
Linux ç¥è¯ä¼ æè
SOHO æ å¼åè
ææ
é¿ C è¯è¨
*date time:2006-11-15 21:11:54
*Note: ä»»ä½äººå¯ä»¥ä»»æå¤å¶ä»£ç 并è¿ç¨è¿äºææ¡£ï¼å½ç¶å
æ¬ä½ çåä¸ç¨é
* ä½è¯·éµå¾ª GPL
*Hope:å¸æè¶æ¥è¶å¤ç人贡ç®èªå·±çåéï¼ä¸ºç§å¦ææ¯åå±åºå
* ç§æç«å¨å·¨äººçè©èä¸è¿æ¥æ´å¿«ï¼æè°¢æå¼æºåè¾çè´¡ç®ï¼
*æè°¢ æä¾åå§ä»£ç ï¼
æå¨ä»çåºç¡ä¸æ´çäºæ¤æ
*********************************************************************/
#include <stdio.h>
#include "get.h"
int main (int argc, char** argv)
{
int a = 100;
int b = get ();
int c = set (a);
int d = get ();
printf ("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);
return 0;
}
ç¼è¯æ¤ç¨åºç¨ä¸åå½ä»¤ï¼å¦æå·²ç»æä¸é¢çæç libggg.so æ¾å°äºåºæ件æ索路å¾æå®çæ件ç®å½ï¼æ¯å¦ /lib æ /usr/lib ä¹ç±»çï¼å°±ç¨ä¸é¢è¿æ¡å½ä»¤ï¼
QUOTE:
g++ pk.cpp -o app -Wall -g -lggg
å¦åå°±ç¨ä¸é¢è¿æ¡å½ä»¤ï¼
QUOTE:
g++ pk.cpp -o app -Wall -g -lggg -L`pwd`
ä¸é¢æ们就å¼å§è°è¯ä¸é¢å½ä»¤çæç app ç¨åºå§ãå¦æå·²ç»æä¸é¢çæç libggg.so æ¾å°äºåºæ件æ索路å¾æå®çæ件ç®å½ï¼æ¯å¦ /libæ /usr/lib ä¹ç±»çï¼è°è¯å°±é¡ºå©å®æï¼å¦ä¸
ï¼
QUOTE:
./app
GNU gdb 6.4-debian
Copyright 2005 Free Software Foundation,Inc.
GDB is free software, covered by the GNU
General Public License, and you are
welcome to change it and/or distribute
copies of it under certain conditions.
Type "show copying" to see theconditions.
There is absolutely no warranty for GDB.
Type "show warranty" for details.This GDB was configured as "i486-linux-
gnu"...Using host libthread_db library"/lib/tls/i686/cmov/libthread_db.so.1".
(gdb) b main /* è¿æ¯å¨ç¨åºç main å¤è®¾ç½®æç¹ */
Breakpoint 1 at 0x804853c: file pk.cpp,line 7.
(gdb) b set /* è¿æ¯å¨ç¨åºç set å¤è®¾ç½®æç¹ */
Function "set" not defined.
Make breakpoint pending on future shared
library load? (y or [n]) y /* è¿éå¿
é¡»éæ© y è°è¯ç¨åºæä¼è·è¸ªå°å¨æé¾æ¥åºå
é¨å»
*/Breakpoint 2 (set) pending.
(gdb) run /* å¼å§è¿è¡æ们çç¨åºï¼ç´å°éè§æç¹æ¶æå */
Starting program: /data/example/c/app
Breakpoint 3 at 0xb7f665f8: file get.cpp,line 11.
Pending breakpoint "set" resolved
Breakpoint 1, main (argc=1,argv=0xbf990504) at pk.cpp:7
7 int a = 100;
(gdb) n /* 继ç»æ§è¡ç¨åºçä¸ä¸è¡ä»£ç
*/
8 int b = get ();
(gdb) n /* ç¨åºæ§è¡å°äºæ们æç¹æå¨çå¨æé¾æ¥åºäº */
get x=0
9 int c = set (a);(gdb) n
Breakpoint 3, set (a=100) at get.cpp:11
11 printf ("set a=%d\n", a);
(gdb) list /* æ¥çå½å代ç è¡å¨å´ç代ç ï¼è¯ææ们已ç»è·è¸ªå°å¨æé¾æ¥åºçæºä»£ç éé¢äº */
6 printf ("get x=%d\n", x);
7 return x;
8 }
9 int set (int a)
10 {
11 printf ("set a=%d\n", a);
12 x = a;
13 return x;
14 }
(gdb) n
set a=100
12 x = a;(gdb) n
13 return x;(gdb) n
14 }
(gdb) n
main (argc=1, argv=0xbf990504) at
pk.cpp:10
10 int d = get ();
(gdb) n
get x=100
11 printf ("a=%d,b=%d,c=%
d,d=%d\n",a,b,c,d);
(gdb) n
a=100,b=0,c=100,d=100
12 return 0;
(gdb) c
Continuing.
Program exited normally.
(gdb) quit /* ç¨åºé¡ºå©æ§è¡ç»æ */#
å¦ææ们没ææå¨æé¾æ¥åºæ¾å°æå®ç®å½ï¼æ¯å¦/libéé¢ï¼è°è¯å°±ä¼å¤±è´¥ï¼è¿ç¨å¦ä¸ï¼
QUOTE:
# gdb ./app
GNU gdb 6.4-debian
Copyright 2005 Free Software Foundation,
Inc.
GDB is free software, covered by the GNU
General Public License, and you arewelcome to change it and/or distribute
copies of it under certain conditions.
Type "show copying" to see theconditions.
There is absolutely no warranty for GDB.
Type "show warranty" for details.
This GDB was configured as "i486-linux-
gnu"...Using host libthread_db library
"/lib/tls/i686/cmov/libthread_db.so.1".
(gdb) b main
Breakpoint 1 at 0x804853c: file pk.cpp,
line 7.
(gdb) b set
Function "set" not defined.
Make breakpoint pending on future shared
library load? (y or [n]) y
Breakpoint 2 (set) pending.
(gdb) run /* è½ç¶è°è¯æä½é½ä¸æ ·ï¼ä½ç¨åºæ§è¡å¤±è´¥ */
Starting program: /data/example/c/app
/data/example/c/app: error while loading
shared libraries: libggg.so: cannot open
shared object file: No such file or
directory
Program exited with code 0177.
(gdb) quit
#
æ¬æ¬¡å®éªçç¯å¢æ¯ï¼
CPU:AMD Athlon(tm) 64 Processor 3000+
å
åï¼512M
OS:Ubuntu GNU/Linux 6.06 dapper LTS
gcc:gcc çæ¬ 4.0.3 (Ubuntu 4.0.3-1ubuntu5)
break(b) è¡å·ï¼å¨æä¸è¡è®¾ç½®æç¹
break å½æ°åï¼å¨æ个å½æ°å¼å¤´è®¾ç½®æç¹
break...if...ï¼è®¾ç½®æ¡ä»¶æç¹
continue(æc)ï¼ä»å½åä½ç½®å¼å§è¿ç»èéåæ¥æ§è¡ç¨åº
delete breakpointsï¼å é¤æææç¹
delete breakpoints nï¼å é¤åºå·ä¸ºnçæç¹
disable breakpointsï¼ç¦ç¨æç¹
enable breakpointsï¼å¯ç¨æç¹
info(æi) breakpointsï¼åçå½å设置äºåªäºæç¹
run(ær)ï¼ä»å¼å§è¿ç»èéåæ¥æ§è¡ç¨åº
display åéåï¼è·è¸ªæ¥çä¸ä¸ªåéï¼æ¯æ¬¡åä¸æ¥é½æ¾ç¤ºå®çå¼
undisplayï¼åæ¶å¯¹å
å设置çé£äºåéçè·è¸ª
温馨提示:答案为网友推荐,仅供参考