锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="Ip" value="localhost"/>
<add key="Port" value="8888"/>
<add key="ServiceName" value="Indexer"/>

</appSettings>
</configuration>
澶存枃浠跺涓嬶細
#pragma once
#include <string>
#include <map>

class AppConfig

{
public:
AppConfig(void);
~AppConfig(void);
int GetInt(std::string key);
std::string GetString(std::string key);
private:
std::map<std::string,std::string> config_map_;
};
extern AppConfig appConfig;

#include "AppConfig.h"
#include "Markup.h"
AppConfig appConfig;

AppConfig::AppConfig(void)

{
CMarkup parser;
if (!parser.Load( "App.Config" ))
{
return;
}
if (parser.FindChildElem("appSettings"))
{
parser.IntoElem();
while (parser.FindChildElem("add"))
{
std::string key = parser.GetChildAttrib("key");
std::string value = parser.GetChildAttrib("value");
config_map_[key] = value;
}
parser.OutOfElem();
}
}
AppConfig::~AppConfig(void)

{
}
int AppConfig::GetInt( std::string key )

{
if (config_map_.find(key) != config_map_.end())
{
return atoi(config_map_[key].c_str());
}
else
{
return 0;
}
}
std::string AppConfig::GetString( std::string key )

{
if (config_map_.find(key) != config_map_.end())
{
return config_map_[key];
}
else
{
return "";
}
}
嫻嬭瘯浠g爜涓猴細
// MarkupTest.cpp : 瀹氫箟鎺у埗鍙板簲鐢ㄧ▼搴忕殑鍏ュ彛鐐廣?br>
//
#include "stdafx.h"
#include "AppConfig.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])

{
cout << appConfig.GetString("Ip") << "-----" << appConfig.GetInt("Port") << "----" << appConfig.GetString("ServiceName") << endl;
return 0;
}

]]>
vs2008璋冭瘯鍚庢帶鍒跺彴紿楀彛鍏充笉浜?010-07-29 16:19
鏈榪戠敤Visual Studio 2008 鍐欎竴浜涙帶鍒跺彴紼嬪簭錛岃皟璇曞悗鐨勬椂鍊欙紝褰撹蛋鍒板畬鎴愮殑鏃跺欙紝榪欎釜鎺у埗鍙扮▼搴忕殑紿楀彛灝卞叧涓嶄簡浜嗐傚啀璋冭瘯鐨勬椂鍊欏氨浼氬嚭鐜頒竴涓柊鐨勬帶鍒跺彴紼嬪簭銆?br>鍦ㄤ換鍔$鐞嗗櫒榪樺彲浠ョ湅鍒拌繖涓獥鍙o紝浣嗘槸鍏充笉鎺変簡銆傛劅瑙夎繖涓帶鍒跺彴紼嬪簭宸茬粡澶辨帶浜嗐?br>铏界劧榪欎釜瀵圭數鑴戣繍琛屾病鏈夊獎鍝嶏紝浣嗚繕鏄緢涓嶇埥銆傝屼笖鏈鍚庡叧鏈鴻繕鏈夐棶棰橈紝瀵艱嚧涓嶈兘鍏蟲満銆?br>鎵懼埌涓浜涚浉鍏崇殑緗戦〉涔熻璁虹殑錛屾渶鍚庣粨璁烘槸windows鐨勪竴涓洿鏂癒B978037瀵艱嚧cress.exe鍑轟簡涓浜涢棶棰樸?br>瑙e喅鍔炴硶錛氬垹闄B978037鏇存柊錛屽垹闄ょ殑鍔炴硶鏄湪鎺у埗闈㈡澘鐨勬坊鍔犳垨鍒犻櫎紼嬪簭闈㈡澘閲岋紝鍕鵑夋樉紺烘洿鏂幫紝鎵懼埌KB978037鏇存柊錛屽垹闄ゃ?br>闄勫埆浜虹殑璁ㄨ璁板綍錛?a >http://social.msdn.microsoft.com/Forums/en-US/vsdebug/thread/e6d4a4f5-7002-401a-90e1-6174d7f9e3ca/
]]>
浣跨敤璇存槑錛?br> 錛?錛夋簮浠g爜涓昏鎻愪緵浜哅D5綾伙紝鍦ㄧ被涔嬪鎻愪緵浜嗕袱涓嚱鏁幫細
std::string getMD5(std::ifstream& stream);//榪欎釜鏄枃浠舵帴鍙o紝璁$畻鏂囦歡鍐呭鐨凪D5
std::string getMD5(const char* str,unsigned int str_len);//榪欎釜灝變笉鐢ㄨ浜?br>鎯崇爺絀朵唬鐮佺殑璇濓紝鍙傝僊D5綾葷殑瀹炵幇錛屽鏋滃彧鏄敤鐨勮瘽錛屽彧闇浼氱敤涓婇潰鐨勬帴鍙e嵆鍙?br> 錛?錛塻td::string getMD5(const char* str,unsigned int str_len)鐨勪嬌鐢細
string sName = "MD5";
string sMD5 = getMD5(sName.c_str(),sName.length());
姝ゆ椂sMD5鐨勫間負錛?f138a09169b250e9dcb378140907378
錛?錛塻td::string getMD5(std::ifstream& stream)鐨勪嬌鐢細鍒涘緩md5.txt錛屽唴瀹逛負錛歁D5
ifstream file("md5.txt");
string sMD5File = getMD5(file);
sMD5File 鐨勪篃鏄細7f138a09169b250e9dcb378140907378
錛?錛塴inux涓嬫彁渚沵d5sum,灝嗕笂闈㈢殑md5.txt浼犲埌linux涓嬶紝鐒跺悗錛歮d5sum md5.txt錛岀粨鏋滃拰涓婇潰涓鏍楓傛敞鎰忥紝涓瀹氳紜md5.txt鍐呭涓?涓瓧鑺傦紝濡傛灉鐩存帴鐧誨綍涓妉inux錛岀敤vi鍒涘緩md5.txt錛岀劧鍚庤緭鍏?#8220;MD5”錛屾渶鍚庝繚瀛橈紝榪欑鏂瑰紡linux涓嬩細榪藉姞涓涓┖琛岋紝瀵艱嚧MD5鍊間笉涓鑷淬?br> 錛?錛夊畨鍏ㄦ剰璇嗚鏍戠珛錛岃繖涓綉绔?a >http://www.cmd5.com/浠ョ綉欏靛艦寮忔彁渚沵d5瑙e瘑錛屽皢涓婇潰鐨?f138a09169b250e9dcb378140907378鐨勮緭鍏ワ紝鍑犵鏃墮棿錛屽緱鍒癕D5
]]>
]]>
]]>
[tqg@localhost test]$ vi test.cpp
#include <pthread.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
void signal_handler(int sig)
{
printf("catch signal: %d,thread id = %u\n",sig,pthread_self());
pthread_exit(0);
}
void* thread_handler(void*arg)
{
signal(SIGQUIT,signal_handler);
printf("thread arg = %s\n",(char*)arg);
sleep(10);
printf("in thread\n");
return (void*)0;
}
int main()
{
char* pArg = "hello";
pthread_t tid;
pthread_create(&tid,NULL,thread_handler,pArg);
printf("main thread id = %u\n",pthread_self());
sleep(2);
printf("killing now\n");
pthread_kill(tid,SIGQUIT);
sleep(20);
printf("exit main now\n");
return 0;
}
~
~
~
~
"test.cpp" 42L, 648C written
[tqg@localhost test]$ g++ -o test test.cpp -lpthread
[tqg@localhost test]$ ./test
main thread id = 3086875296
thread arg = hello
killing now
catch signal: 3,thread id = 3086871472
exit main now
[tqg@localhost test]$
鍙互鐪嬪嚭錛屼俊鍙峰鐞嗗嚱鏁扮殑鎵ц鏄湪瑕佹崟鑾蜂俊鍙風殑瀛愮嚎紼媡hread_handler鐨勪笂涓嬫枃涓墽琛岀殑銆?/p>
8 sum+=i;
9 }
10 return sum;
11 }
12
13
14 main()
15 {
16 int i;
17 long result = 0;
18 for(i=1; i<=100; i++)
19 {
20 result += i;
21 }
22
23 printf("result[1-100] = %d \n", result );
24 printf("result[1-250] = %d \n", func(250) );
25 }
緙栬瘧鐢熸垚鎵ц鏂囦歡錛氾紙Linux涓嬶級
hchen/test> cc -g tst.c -o tst
浣跨敤GDB璋冭瘯錛?
hchen/test> gdb tst <---------- 鍚姩GDB
GNU gdb 5.1.1
Copyright 2002 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 the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-suse-linux"...
(gdb) l <-------------------- l鍛戒護鐩稿綋浜巐ist錛屼粠絎竴琛屽紑濮嬩緥鍑哄師鐮併?
1 #include
2
3 int func(int n)
4 {
5 int sum=0,i;
6 for(i=0; i 7 {
8 sum+=i;
9 }
10 return sum;
(gdb) <-------------------- 鐩存帴鍥炶濺琛ㄧず錛岄噸澶嶄笂涓嬈″懡浠?
11 }
12
13
14 main()
15 {
16 int i;
17 long result = 0;
18 for(i=1; i<=100; i++)
19 {
20 result += i;
(gdb) break 16 <-------------------- 璁劇疆鏂偣錛屽湪婧愮▼搴忕16琛屽銆?
Breakpoint 1 at 0x8048496: file tst.c, line 16.
(gdb) break func <-------------------- 璁劇疆鏂偣錛屽湪鍑芥暟func()鍏ュ彛澶勩?
Breakpoint 2 at 0x8048456: file tst.c, line 5.
(gdb) info break <-------------------- 鏌ョ湅鏂偣淇℃伅銆?
Num Type Disp Enb Address What
1 breakpoint keep y 0x08048496 in main at tst.c:16
2 breakpoint keep y 0x08048456 in func at tst.c:5
(gdb) r <--------------------- 榪愯紼嬪簭錛宺un鍛戒護綆鍐?
Starting program: /home/hchen/test/tst
Breakpoint 1, main () at tst.c:17 <---------- 鍦ㄦ柇鐐瑰鍋滀綇銆?
17 long result = 0;
(gdb) n <--------------------- 鍗曟潯璇彞鎵ц錛宯ext鍛戒護綆鍐欍?
18 for(i=1; i<=100; i++)
(gdb) n
20 result += i;
(gdb) n
18 for(i=1; i<=100; i++)
(gdb) n
20 result += i;
(gdb) c <--------------------- 緇х畫榪愯紼嬪簭錛宑ontinue鍛戒護綆鍐欍?
Continuing.
result[1-100] = 5050 <----------紼嬪簭杈撳嚭銆?
Breakpoint 2, func (n=250) at tst.c:5
5 int sum=0,i;
(gdb) n
6 for(i=1; i<=n; i++)
(gdb) p i <--------------------- 鎵撳嵃鍙橀噺i鐨勫鹼紝print鍛戒護綆鍐欍?
$1 = 134513808
(gdb) n
8 sum+=i;
(gdb) n
6 for(i=1; i<=n; i++)
(gdb) p sum
$2 = 1
(gdb) n
8 sum+=i;
(gdb) p i
$3 = 2
(gdb) n
6 for(i=1; i<=n; i++)
(gdb) p sum
$4 = 3
(gdb) bt <--------------------- 鏌ョ湅鍑芥暟鍫嗘爤銆?
#0 func (n=250) at tst.c:5
#1 0x080484e4 in main () at tst.c:24
#2 0x400409ed in __libc_start_main () from /lib/libc.so.6
(gdb) finish <--------------------- 閫鍑哄嚱鏁般?
Run till exit from #0 func (n=250) at tst.c:5
0x080484e4 in main () at tst.c:24
24 printf("result[1-250] = %d \n", func(250) );
Value returned is $6 = 31375
(gdb) c <--------------------- 緇х畫榪愯銆?
Continuing.
result[1-250] = 31375 <----------紼嬪簭杈撳嚭銆?
Program exited with code 027. <--------紼嬪簭閫鍑猴紝璋冭瘯緇撴潫銆?
(gdb) q <--------------------- 閫鍑篻db銆?
hchen/test>
濂戒簡錛屾湁浜嗕互涓婄殑鎰熸ц璇嗭紝榪樻槸璁╂垜浠潵緋葷粺鍦拌璇嗕竴涓媑db鍚с?
浣跨敤GDB
鈥斺斺斺?
涓鑸潵璇碐DB涓昏璋冭瘯鐨勬槸C/C++鐨勭▼搴忋傝璋冭瘯C/C++鐨勭▼搴忥紝棣栧厛鍦ㄧ紪璇戞椂錛屾垜浠繀
欏昏鎶婅皟璇曚俊鎭姞鍒板彲鎵ц鏂囦歡涓備嬌鐢ㄧ紪璇戝櫒錛坈c/gcc/g++錛夌殑 -g 鍙傛暟鍙互鍋氬埌榪欎竴鐐廣?br>濡傦細
> cc -g hello.c -o hello
> g++ -g hello.cpp -o hello
濡傛灉娌℃湁-g錛屼綘灝嗙湅涓嶈紼嬪簭鐨勫嚱鏁板悕銆佸彉閲忓悕錛屾墍浠f浛鐨勫叏鏄繍琛屾椂鐨勫唴瀛樺湴鍧銆傚綋浣犵敤
-g鎶婅皟璇曚俊鎭姞鍏ヤ箣鍚庯紝騫舵垚鍔熺紪璇戠洰鏍囦唬鐮佷互鍚庯紝璁╂垜浠潵鐪嬬湅濡備綍鐢╣db鏉ヨ皟璇曚粬銆?
鍚姩GDB鐨勬柟娉曟湁浠ヤ笅鍑犵錛?
1銆乬db
program涔熷氨鏄綘鐨勬墽琛屾枃浠訛紝涓鑸湪褰撶劧鐩綍涓嬨?
2銆乬db core
鐢╣db鍚屾椂璋冭瘯涓涓繍琛岀▼搴忓拰core鏂囦歡錛宑ore鏄▼搴忛潪娉曟墽琛屽悗core dump鍚庝駭鐢熺殑鏂囦歡銆?
3銆乬db
濡傛灉浣犵殑紼嬪簭鏄竴涓湇鍔$▼搴忥紝閭d箞浣犲彲浠ユ寚瀹氳繖涓湇鍔$▼搴忚繍琛屾椂鐨勮繘紼婭D銆俫db浼氳嚜
鍔╝ttach涓婂幓錛屽茍璋冭瘯浠栥俻rogram搴旇鍦≒ATH鐜鍙橀噺涓悳绱㈠緱鍒般?
GDB鍚姩鏃訛紝鍙互鍔犱笂涓浜汫DB鐨勫惎鍔ㄥ紑鍏籌紝璇︾粏鐨勫紑鍏沖彲浠ョ敤gdb -help鏌ョ湅銆傛垜鍦ㄤ笅
闈㈠彧渚嬩婦涓浜涙瘮杈冨父鐢ㄧ殑鍙傛暟錛?
-symbols
-s
浠庢寚瀹氭枃浠朵腑璇誨彇絎﹀彿琛ㄣ?
-se file
浠庢寚瀹氭枃浠朵腑璇誨彇絎﹀彿琛ㄤ俊鎭紝騫舵妸浠栫敤鍦ㄥ彲鎵ц鏂囦歡涓?
-core
-c
璋冭瘯鏃禼ore dump鐨刢ore鏂囦歡銆?
-directory
-d
鍔犲叆涓涓簮鏂囦歡鐨勬悳绱㈣礬寰勩傞粯璁ゆ悳绱㈣礬寰勬槸鐜鍙橀噺涓璓ATH鎵瀹氫箟鐨勮礬寰勩?
GDB鐨勫懡浠ゆ璨?
鈥斺斺斺斺斺斺?
鍚姩gdb鍚庯紝灝變綘琚甫鍏db鐨勮皟璇曠幆澧冧腑錛屽氨鍙互浣跨敤gdb鐨勫懡浠ゅ紑濮嬭皟璇曠▼搴忎簡錛実db
鐨勫懡浠ゅ彲浠ヤ嬌鐢╤elp鍛戒護鏉ユ煡鐪嬶紝濡備笅鎵紺猴細
/home/hchen> gdb
GNU gdb 5.1.1
Copyright 2002 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 the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-suse-linux".
(gdb) help
List of classes of commands:
aliases -- Aliases of other commands
breakpoints -- Making program stop at certain points
data -- Examining data
files -- Specifying and examining files
internals -- Maintenance commands
obscure -- Obscure features
running -- Running the program
stack -- Examining the stack
status -- Status inquiries
support -- Support facilities
tracepoints -- Tracing of program execution without stopping the program
user-defined -- User-defined commands
Type "help" followed by a class name for a list of commands in that class.
Type "help" followed by command name for full documentation.
Command name abbreviations are allowed if unambiguous.
(gdb)
gdb鐨勫懡浠ゅ緢澶氾紝gdb鎶婁箣鍒嗘垚璁稿涓綾匯俬elp鍛戒護鍙槸渚嬪嚭gdb鐨勫懡浠ょ綾伙紝濡傛灉瑕佺湅
縐嶇被涓殑鍛戒護錛屽彲浠ヤ嬌鐢╤elp 鍛戒護錛屽錛歨elp breakpoints錛屾煡鐪嬭緗柇鐐圭殑鎵鏈夊懡浠ゃ備篃
鍙互鐩存帴help 鏉ユ煡鐪嬪懡浠ょ殑甯姪銆?
gdb涓紝杈撳叆鍛戒護鏃訛紝鍙互涓嶇敤鎵撳叏鍛戒護錛屽彧鐢ㄦ墦鍛戒護鐨勫墠鍑犱釜瀛楃灝卞彲浠ヤ簡錛屽綋鐒訛紝鍛戒護
鐨勫墠鍑犱釜瀛楃搴旇瑕佹爣蹇楃潃涓涓敮涓鐨勫懡浠わ紝鍦↙inux涓嬶紝浣犲彲浠ユ暡鍑諱袱嬈AB閿潵琛ラ綈
鍛戒護鐨勫叏縐幫紝濡傛灉鏈夐噸澶嶇殑錛岄偅涔坓db浼氭妸鍏朵緥鍑烘潵銆?
紺轟緥涓錛氬湪榪涘叆鍑芥暟func鏃訛紝璁劇疆涓涓柇鐐廣傚彲浠ユ暡鍏reak func錛屾垨鏄洿鎺ュ氨鏄痓 func
(gdb) b func
Breakpoint 1 at 0x8048458: file hello.c, line 10.
紺轟緥浜岋細鏁插叆b鎸変袱嬈AB閿紝浣犱細鐪嬪埌鎵鏈塨鎵撳ご鐨勫懡浠わ細
(gdb) b
backtrace break bt
(gdb)
紺轟緥涓夛細鍙寰楀嚱鏁扮殑鍓嶇紑錛屽彲浠ヨ繖鏍鳳細
(gdb) b make_ <鎸塗AB閿?gt;
錛堝啀鎸変笅涓嬈AB閿紝浣犱細鐪嬪埌:錛?
make_a_section_from_file make_environ
make_abs_section make_function_type
make_blockvector make_pointer_type
make_cleanup make_reference_type
make_command make_symbol_completion_list
(gdb) b make_
GDB鎶婃墍鏈塵ake寮澶寸殑鍑芥暟鍏ㄩ儴渚嬪嚭鏉ョ粰浣犳煡鐪嬨?
紺轟緥鍥涳細璋冭瘯C++鐨勭▼搴忔椂錛屾湁鍙互鍑芥暟鍚嶄竴鏍楓傚錛?
(gdb) b 'bubble( M-?
bubble(double,double) bubble(int,int)
(gdb) b 'bubble(
浣犲彲浠ユ煡鐪嬪埌C++涓殑鎵鏈夌殑閲嶈澆鍑芥暟鍙婂弬鏁般傦紙娉細M-?鍜?#8220;鎸変袱嬈AB閿?#8221;鏄竴涓剰鎬濓級
瑕侀鍑篻db鏃訛紝鍙敤鍙憅uit鎴栧懡浠ょ畝縐皅灝辮浜嗐?
GDB涓繍琛孶NIX鐨剆hell紼嬪簭
鈥斺斺斺斺斺斺斺斺斺斺斺?
鍦╣db鐜涓紝浣犲彲浠ユ墽琛孶NIX鐨剆hell鐨勫懡浠わ紝浣跨敤gdb鐨剆hell鍛戒護鏉ュ畬鎴愶細
shell
璋冪敤UNIX鐨剆hell鏉ユ墽琛岋紝鐜鍙橀噺SHELL涓畾涔夌殑UNIX鐨剆hell灝嗕細琚敤鏉ユ墽琛岋紝濡?br>鏋淪HELL娌℃湁瀹氫箟錛岄偅灝變嬌鐢║NIX鐨勬爣鍑唖hell錛?bin/sh銆傦紙鍦╓indows涓嬌鐢–ommand.com
鎴朿md.exe錛?
榪樻湁涓涓猤db鍛戒護鏄痬ake錛?
make
鍙互鍦╣db涓墽琛宮ake鍛戒護鏉ラ噸鏂癰uild鑷繁鐨勭▼搴忋傝繖涓懡浠ょ瓑浠蜂簬“shell make ”銆?
鍦℅DB涓繍琛岀▼搴?
鈥斺斺斺斺斺斺斺?
褰撲互gdb 鏂瑰紡鍚姩gdb鍚庯紝gdb浼氬湪PATH璺緞鍜屽綋鍓嶇洰褰曚腑鎼滅儲鐨勬簮鏂囦歡銆傚瑕佺‘璁db
鏄惁璇誨埌婧愭枃浠訛紝鍙嬌鐢╨鎴杔ist鍛戒護錛岀湅鐪媑db鏄惁鑳藉垪鍑烘簮浠g爜銆?
鍦╣db涓紝榪愯紼嬪簭浣跨敤r鎴栨槸run鍛戒護銆傜▼搴忕殑榪愯錛屼綘鏈夊彲鑳介渶瑕佽緗笅闈㈠洓鏂歸潰鐨勪簨銆?
1銆佺▼搴忚繍琛屽弬鏁般?
set args 鍙寚瀹氳繍琛屾椂鍙傛暟銆傦紙濡傦細set args 10 20 30 40 50錛?
show args 鍛戒護鍙互鏌ョ湅璁劇疆濂界殑榪愯鍙傛暟銆?
2銆佽繍琛岀幆澧冦?
path
鍙瀹氱▼搴忕殑榪愯璺緞銆?
show paths 鏌ョ湅紼嬪簭鐨勮繍琛岃礬寰勩?
set environment varname [=value] 璁劇疆鐜鍙橀噺銆傚錛歴et env USER=hchen
show environment [varname] 鏌ョ湅鐜鍙橀噺銆?
3銆佸伐浣滅洰褰曘?
cd
鐩稿綋浜巗hell鐨刢d鍛戒護銆?
pwd 鏄劇ず褰撳墠鐨勬墍鍦ㄧ洰褰曘?
4銆佺▼搴忕殑杈撳叆杈撳嚭銆?
info terminal 鏄劇ず浣犵▼搴忕敤鍒扮殑緇堢鐨勬ā寮忋?
浣跨敤閲嶅畾鍚戞帶鍒剁▼搴忚緭鍑恒傚錛歳un > outfile
tty鍛戒護鍙互鎸囧啓杈撳叆杈撳嚭鐨勭粓绔澶囥傚錛歵ty /dev/ttyb
璋冭瘯宸茶繍琛岀殑紼嬪簭
鈥斺斺斺斺斺斺斺?
涓ょ鏂規硶錛?
1銆佸湪UNIX涓嬬敤ps鏌ョ湅姝e湪榪愯鐨勭▼搴忕殑PID錛堣繘紼婭D錛夛紝鐒跺悗鐢╣db PID鏍煎紡鎸傛帴姝e湪
榪愯鐨勭▼搴忋?
2銆佸厛鐢╣db 鍏寵仈涓婃簮浠g爜錛屽茍榪涜gdb錛屽湪gdb涓敤attach鍛戒護鏉ユ寕鎺ヨ繘紼嬬殑PID銆傚茍鐢?br>detach鏉ュ彇娑堟寕鎺ョ殑榪涚▼銆?
鏆傚仠 / 鎭㈠紼嬪簭榪愯
鈥斺斺斺斺斺斺斺斺?
璋冭瘯紼嬪簭涓紝鏆傚仠紼嬪簭榪愯鏄繀欏葷殑錛孏DB鍙互鏂逛究鍦版殏鍋滅▼搴忕殑榪愯銆備綘鍙互璁劇疆紼嬪簭
鐨勫湪鍝鍋滀綇錛屽湪浠涔堟潯浠朵笅鍋滀綇錛屽湪鏀跺埌浠涔堜俊鍙鋒椂鍋滃線絳夌瓑銆備互渚夸簬浣犳煡鐪嬭繍琛屾椂鐨勫彉
閲忥紝浠ュ強榪愯鏃剁殑嫻佺▼銆?
褰撹繘紼嬭gdb鍋滀綇鏃訛紝浣犲彲浠ヤ嬌鐢╥nfo program 鏉ユ煡鐪嬬▼搴忕殑鏄惁鍦ㄨ繍琛岋紝榪涚▼鍙鳳紝琚殏鍋?br>鐨勫師鍥犮?
鍦╣db涓紝鎴戜滑鍙互鏈変互涓嬪嚑縐嶆殏鍋滄柟寮忥細鏂偣錛圔reakPoint錛夈佽瀵熺偣錛圵atchPoint錛夈佹崟
鎹夌偣錛圕atchPoint錛夈佷俊鍙鳳紙Signals錛夈佺嚎紼嬪仠姝紙Thread Stops錛夈傚鏋滆鎭㈠紼嬪簭榪愯錛屽彲
浠ヤ嬌鐢╟鎴栨槸continue鍛戒護銆?
涓銆佽緗柇鐐癸紙BreakPoint錛?
鎴戜滑鐢╞reak鍛戒護鏉ヨ緗柇鐐廣傛闈㈡湁鍑犵偣璁劇疆鏂偣鐨勬柟娉曪細
break
鍦ㄨ繘鍏ユ寚瀹氬嚱鏁版椂鍋滀綇銆侰++涓彲浠ヤ嬌鐢╟lass::function鎴杅unction(type,type)鏍煎紡鏉ユ寚瀹氬嚱
鏁板悕銆?
break
鍦ㄦ寚瀹氳鍙峰仠浣忋?
break +offset
break -offset
鍦ㄥ綋鍓嶈鍙風殑鍓嶉潰鎴栧悗闈㈢殑offset琛屽仠浣忋俹ffiset涓鴻嚜鐒舵暟銆?
break filename:linenum
鍦ㄦ簮鏂囦歡filename鐨刲inenum琛屽鍋滀綇銆?
break filename:function
鍦ㄦ簮鏂囦歡filename鐨刦unction鍑芥暟鐨勫叆鍙e鍋滀綇銆?
break *address
鍦ㄧ▼搴忚繍琛岀殑鍐呭瓨鍦板潃澶勫仠浣忋?
break
break鍛戒護娌℃湁鍙傛暟鏃訛紝琛ㄧず鍦ㄤ笅涓鏉℃寚浠ゅ鍋滀綇銆?
break ... if
...鍙互鏄笂榪扮殑鍙傛暟錛宑ondition琛ㄧず鏉′歡錛屽湪鏉′歡鎴愮珛鏃跺仠浣忋傛瘮濡傚湪寰幆澧冧綋涓紝鍙互璁?br>緗産reak if i=100錛岃〃紺哄綋i涓?00鏃跺仠浣忕▼搴忋?
鏌ョ湅鏂偣鏃訛紝鍙嬌鐢╥nfo鍛戒護錛屽涓嬫墍紺猴細錛堟敞錛歯琛ㄧず鏂偣鍙鳳級
info breakpoints [n]
info break [n]
浜屻佽緗瀵熺偣錛圵atchPoint錛?
瑙傚療鐐逛竴鑸潵瑙傚療鏌愪釜琛ㄨ揪寮忥紙鍙橀噺涔熸槸涓縐嶈〃杈懼紡錛夌殑鍊兼槸鍚︽湁鍙樺寲浜嗭紝濡傛灉鏈夊彉鍖栵紝椹?br>涓婂仠浣忕▼搴忋傛垜浠湁涓嬮潰鐨勫嚑縐嶆柟娉曟潵璁劇疆瑙傚療鐐癸細
watch
涓鴻〃杈懼紡錛堝彉閲忥級expr璁劇疆涓涓瀵熺偣銆備竴閲忚〃杈懼紡鍊兼湁鍙樺寲鏃訛紝椹笂鍋滀綇紼嬪簭銆?
rwatch
褰撹〃杈懼紡錛堝彉閲忥級expr琚鏃訛紝鍋滀綇紼嬪簭銆?
awatch
褰撹〃杈懼紡錛堝彉閲忥級鐨勫艱璇繪垨琚啓鏃訛紝鍋滀綇紼嬪簭銆?
info watchpoints
鍒楀嚭褰撳墠鎵璁劇疆浜嗙殑鎵鏈夎瀵熺偣銆?
涓夈佽緗崟鎹夌偣錛圕atchPoint錛?
浣犲彲璁劇疆鎹曟崏鐐規潵琛ユ崏紼嬪簭榪愯鏃剁殑涓浜涗簨浠躲傚錛氳澆鍏ュ叡浜簱錛堝姩鎬侀摼鎺ュ簱錛夋垨鏄疌++
鐨勫紓甯搞傝緗崟鎹夌偣鐨勬牸寮忎負錛?
catch
褰揺vent鍙戠敓鏃訛紝鍋滀綇紼嬪簭銆俥vent鍙互鏄笅闈㈢殑鍐呭錛?
1銆乼hrow 涓涓狢++鎶涘嚭鐨勫紓甯搞傦紙throw涓哄叧閿瓧錛?
2銆乧atch 涓涓狢++鎹曟崏鍒扮殑寮傚父銆傦紙catch涓哄叧閿瓧錛?
3銆乪xec 璋冪敤緋葷粺璋冪敤exec鏃躲傦紙exec涓哄叧閿瓧錛岀洰鍓嶆鍔熻兘鍙湪HP-UX涓嬫湁鐢級
4銆乫ork 璋冪敤緋葷粺璋冪敤fork鏃躲傦紙fork涓哄叧閿瓧錛岀洰鍓嶆鍔熻兘鍙湪HP-UX涓嬫湁鐢級
5銆乿fork 璋冪敤緋葷粺璋冪敤vfork鏃躲傦紙vfork涓哄叧閿瓧錛岀洰鍓嶆鍔熻兘鍙湪HP-UX涓嬫湁鐢級
6銆乴oad 鎴?load 杞藉叆鍏變韓搴擄紙鍔ㄦ侀摼鎺ュ簱錛夋椂銆傦紙load涓哄叧閿瓧錛岀洰鍓嶆鍔熻兘鍙湪HP-UX
涓嬫湁鐢級
7銆乽nload 鎴?unload 鍗歌澆鍏變韓搴擄紙鍔ㄦ侀摼鎺ュ簱錛夋椂銆傦紙unload涓哄叧閿瓧錛岀洰鍓嶆鍔熻兘鍙湪
HP-UX涓嬫湁鐢級
tcatch
鍙緗竴嬈℃崟鎹夌偣錛屽綋紼嬪簭鍋滀綇浠ュ悗錛屽簲鐐硅鑷姩鍒犻櫎銆?
鍥涖佺淮鎶ゅ仠姝㈢偣
涓婇潰璇翠簡濡備綍璁劇疆紼嬪簭鐨勫仠姝㈢偣錛孏DB涓殑鍋滄鐐逛篃灝辨槸涓婅堪鐨勪笁綾匯傚湪GDB涓紝濡傛灉浣?br>瑙夊緱宸插畾涔夊ソ鐨勫仠姝㈢偣娌℃湁鐢ㄤ簡錛屼綘鍙互浣跨敤delete銆乧lear銆乨isable銆乪nable榪欏嚑涓懡浠ゆ潵
榪涜緇存姢銆?
clear
娓呴櫎鎵鏈夌殑宸插畾涔夌殑鍋滄鐐廣?
clear
clear
娓呴櫎鎵鏈夎緗湪鍑芥暟涓婄殑鍋滄鐐廣?
clear
clear
娓呴櫎鎵鏈夎緗湪鎸囧畾琛屼笂鐨勫仠姝㈢偣銆?
delete [breakpoints] [range...]
鍒犻櫎鎸囧畾鐨勬柇鐐癸紝breakpoints涓烘柇鐐瑰彿銆傚鏋滀笉鎸囧畾鏂偣鍙鳳紝鍒欒〃紺哄垹闄ゆ墍鏈夌殑鏂偣銆俽ange
琛ㄧず鏂偣鍙風殑鑼冨洿錛堝錛?-7錛夈傚叾綆鍐欏懡浠や負d銆?
姣斿垹闄ゆ洿濂界殑涓縐嶆柟娉曟槸disable鍋滄鐐癸紝disable浜嗙殑鍋滄鐐癸紝GDB涓嶄細鍒犻櫎錛屽綋浣犺繕闇瑕?br>鏃訛紝enable鍗沖彲錛屽氨濂藉儚鍥炴敹绔欎竴鏍楓?
disable [breakpoints] [range...]
disable鎵鎸囧畾鐨勫仠姝㈢偣錛宐reakpoints涓哄仠姝㈢偣鍙楓傚鏋滀粈涔堥兘涓嶆寚瀹氾紝琛ㄧずdisable鎵鏈夌殑
鍋滄鐐廣傜畝鍐欏懡浠ゆ槸dis.
enable [breakpoints] [range...]
enable鎵鎸囧畾鐨勫仠姝㈢偣錛宐reakpoints涓哄仠姝㈢偣鍙楓?
enable [breakpoints] once range...
enable鎵鎸囧畾鐨勫仠姝㈢偣涓嬈★紝褰撶▼搴忓仠姝㈠悗錛岃鍋滄鐐歸┈涓婅GDB鑷姩disable銆?
enable [breakpoints] delete range...
enable鎵鎸囧畾鐨勫仠姝㈢偣涓嬈★紝褰撶▼搴忓仠姝㈠悗錛岃鍋滄鐐歸┈涓婅GDB鑷姩鍒犻櫎銆?
浜斻佸仠姝㈡潯浠剁淮鎶?
鍓嶉潰鍦ㄨ鍒拌緗柇鐐規椂錛屾垜浠彁鍒拌繃鍙互璁劇疆涓涓潯浠訛紝褰撴潯浠舵垚绔嬫椂錛岀▼搴忚嚜鍔ㄥ仠姝紝榪?br>鏄竴涓潪甯稿己澶х殑鍔熻兘錛岃繖閲岋紝鎴戞兂涓撻棬璇磋榪欎釜鏉′歡鐨勭浉鍏崇淮鎶ゅ懡浠ゃ備竴鑸潵璇達紝涓烘柇鐐?br>璁劇疆涓涓潯浠訛紝鎴戜滑浣跨敤if鍏抽敭璇嶏紝鍚庨潰璺熷叾鏂偣鏉′歡銆傚茍涓旓紝鏉′歡璁劇疆濂藉悗錛屾垜浠彲浠?br>鐢╟ondition鍛戒護鏉ヤ慨鏀規柇鐐圭殑鏉′歡銆傦紙鍙湁break鍜寃atch鍛戒護鏀寔if錛宑atch鐩墠鏆備笉鏀寔
if錛?
condition
淇敼鏂偣鍙蜂負bnum鐨勫仠姝㈡潯浠朵負expression銆?
condition
娓呴櫎鏂偣鍙蜂負bnum鐨勫仠姝㈡潯浠躲?
榪樻湁涓涓瘮杈冪壒孌婄殑緇存姢鍛戒護ignore錛屼綘鍙互鎸囧畾紼嬪簭榪愯鏃訛紝蹇界暐鍋滄鏉′歡鍑犳銆?
ignore
琛ㄧず蹇界暐鏂偣鍙蜂負bnum鐨勫仠姝㈡潯浠禼ount嬈°?
鍏佷負鍋滄鐐硅瀹氳繍琛屽懡浠?
鎴戜滑鍙互浣跨敤GDB鎻愪緵鐨刢ommand鍛戒護鏉ヨ緗仠姝㈢偣鐨勮繍琛屽懡浠ゃ備篃灝辨槸璇達紝褰撹繍琛岀殑
紼嬪簭鍦ㄨ鍋滄浣忔椂錛屾垜浠彲浠ヨ鍏惰嚜鍔ㄨ繍琛屼竴浜涘埆鐨勫懡浠わ紝榪欏緢鏈夊埄琛岃嚜鍔ㄥ寲璋冭瘯銆傚鍩轟簬
GDB鐨勮嚜鍔ㄥ寲璋冭瘯鏄竴涓己澶х殑鏀寔銆?
commands [bnum]
... command-list ...
end
涓烘柇鐐瑰彿bnum鎸囧啓涓涓懡浠ゅ垪琛ㄣ傚綋紼嬪簭琚鏂偣鍋滀綇鏃訛紝gdb浼氫緷嬈¤繍琛屽懡浠ゅ垪琛ㄤ腑鐨?br>鍛戒護銆?
渚嬪錛?
break foo if x>0
commands
printf "x is %d\n",x
continue
end
鏂偣璁劇疆鍦ㄥ嚱鏁癴oo涓紝鏂偣鏉′歡鏄痻>0錛屽鏋滅▼搴忚鏂綇鍚庯紝涔熷氨鏄紝涓鏃鐨勫煎湪foo
鍑芥暟涓ぇ浜?錛孏DB浼氳嚜鍔ㄦ墦鍗板嚭x鐨勫鹼紝騫剁戶緇繍琛岀▼搴忋?
濡傛灉浣犺娓呴櫎鏂偣涓婄殑鍛戒護搴忓垪錛岄偅涔堝彧瑕佺畝鍗曠殑鎵ц涓涓媍ommands鍛戒護錛屽茍鐩存帴鍦ㄦ墦涓?br>end灝辮浜嗐?
涓冦佹柇鐐硅彍鍗?
鍦–++涓紝鍙兘浼氶噸澶嶅嚭鐜板悓涓涓悕瀛楃殑鍑芥暟鑻ュ共嬈★紙鍑芥暟閲嶈澆錛夛紝鍦ㄨ繖縐嶆儏鍐典笅錛宐reak 涓?br>鑳藉憡璇塆DB瑕佸仠鍦ㄥ摢涓嚱鏁扮殑鍏ュ彛銆傚綋鐒訛紝浣犲彲浠ヤ嬌鐢╞reak 涔熷氨鏄妸鍑芥暟鐨勫弬鏁扮被鍨嬪憡
璇塆DB錛屼互鎸囧畾涓涓嚱鏁般傚惁鍒欑殑璇濓紝GDB浼氱粰浣犲垪鍑轟竴涓柇鐐硅彍鍗曚緵浣犻夋嫨浣犳墍闇瑕佺殑
鏂偣銆備綘鍙杈撳叆浣犺彍鍗曞垪琛ㄤ腑鐨勭紪鍙峰氨鍙互浜嗐傚錛?
(gdb) b String::after
[0] cancel
[1] all
[2] file:String.cc; line number:867
[3] file:String.cc; line number:860
[4] file:String.cc; line number:875
[5] file:String.cc; line number:853
[6] file:String.cc; line number:846
[7] file:String.cc; line number:735
> 2 4 6
Breakpoint 1 at 0xb26c: file String.cc, line 867.
Breakpoint 2 at 0xb344: file String.cc, line 875.
Breakpoint 3 at 0xafcc: file String.cc, line 846.
Multiple breakpoints were set.
Use the "delete" command to delete unwanted
breakpoints.
(gdb)
鍙錛孏DB鍒楀嚭浜嗘墍鏈塧fter鐨勯噸杞藉嚱鏁幫紝浣犲彲浠ラ変竴涓嬪垪琛ㄧ紪鍙峰氨琛屼簡銆?琛ㄧず鏀懼純璁劇疆
鏂偣錛?琛ㄧず鎵鏈夊嚱鏁伴兘璁劇疆鏂偣銆?
鍏佹仮澶嶇▼搴忚繍琛屽拰鍗曟璋冭瘯
褰撶▼搴忚鍋滀綇浜嗭紝浣犲彲浠ョ敤continue鍛戒護鎭㈠紼嬪簭鐨勮繍琛岀洿鍒扮▼搴忕粨鏉燂紝鎴栦笅涓涓柇鐐瑰埌鏉ャ?br>涔熷彲浠ヤ嬌鐢╯tep鎴杗ext鍛戒護鍗曟璺熻釜紼嬪簭銆?
continue [ignore-count]
c [ignore-count]
fg [ignore-count]
鎭㈠紼嬪簭榪愯錛岀洿鍒扮▼搴忕粨鏉燂紝鎴栨槸涓嬩竴涓柇鐐瑰埌鏉ャ俰gnore-count琛ㄧず蹇界暐鍏跺悗鐨勬柇鐐規
鏁般俢ontinue錛宑錛宖g涓変釜鍛戒護閮芥槸涓鏍風殑鎰忔濄?
step
鍗曟璺熻釜錛屽鏋滄湁鍑芥暟璋冪敤錛屼粬浼氳繘鍏ヨ鍑芥暟銆傝繘鍏ュ嚱鏁扮殑鍓嶆彁鏄紝姝ゅ嚱鏁拌緙栬瘧鏈塪ebug
淇℃伅銆傚緢鍍廣C絳夊伐鍏蜂腑鐨剆tep in銆傚悗闈㈠彲浠ュ姞count涔熷彲浠ヤ笉鍔狅紝涓嶅姞琛ㄧず涓鏉℃潯鍦版墽琛岋紝
鍔犺〃紺烘墽琛屽悗闈㈢殑count鏉℃寚浠わ紝鐒跺悗鍐嶅仠浣忋?
next
鍚屾牱鍗曟璺熻釜錛屽鏋滄湁鍑芥暟璋冪敤錛屼粬涓嶄細榪涘叆璇ュ嚱鏁般傚緢鍍廣C絳夊伐鍏蜂腑鐨剆tep over銆傚悗闈?br>鍙互鍔燾ount涔熷彲浠ヤ笉鍔狅紝涓嶅姞琛ㄧず涓鏉℃潯鍦版墽琛岋紝鍔犺〃紺烘墽琛屽悗闈㈢殑count鏉℃寚浠わ紝鐒跺悗
鍐嶅仠浣忋?
set step-mode
set step-mode on
鎵撳紑step-mode妯″紡錛屼簬鏄紝鍦ㄨ繘琛屽崟姝ヨ窡韙椂錛岀▼搴忎笉浼氬洜涓烘病鏈塪ebug淇℃伅鑰屼笉鍋滀綇銆?br>榪欎釜鍙傛暟鏈夊緢鍒╀簬鏌ョ湅鏈哄櫒鐮併?
set step-mod off
鍏抽棴step-mode妯″紡銆?
finish
榪愯紼嬪簭錛岀洿鍒板綋鍓嶅嚱鏁板畬鎴愯繑鍥炪傚茍鎵撳嵃鍑芥暟榪斿洖鏃剁殑鍫嗘爤鍦板潃鍜岃繑鍥炲煎強鍙傛暟鍊肩瓑淇℃伅銆?
until 鎴?u
褰撲綘鍘屽︿簡鍦ㄤ竴涓驚鐜綋鍐呭崟姝ヨ窡韙椂錛岃繖涓懡浠ゅ彲浠ヨ繍琛岀▼搴忕洿鍒伴鍑哄驚鐜綋銆?
stepi 鎴?si
nexti 鎴?ni
鍗曟璺熻釜涓鏉℃満鍣ㄦ寚浠わ紒涓鏉$▼搴忎唬鐮佹湁鍙兘鐢辨暟鏉℃満鍣ㄦ寚浠ゅ畬鎴愶紝stepi鍜宯exti鍙互鍗曟
鎵ц鏈哄櫒鎸囦護銆備笌涔嬩竴鏍鋒湁鐩稿悓鍔熻兘鐨勫懡浠ゆ槸“display/i $pc” 錛屽綋榪愯瀹岃繖涓懡浠ゅ悗錛屽崟
姝ヨ窡韙細鍦ㄦ墦鍑虹▼搴忎唬鐮佺殑鍚屾椂鎵撳嚭鏈哄櫒鎸囦護錛堜篃灝辨槸姹囩紪浠g爜錛?
涔濄佷俊鍙鳳紙Signals錛?
淇″彿鏄竴縐嶈蔣涓柇錛屾槸涓縐嶅鐞嗗紓姝ヤ簨浠剁殑鏂規硶銆備竴鑸潵璇達紝鎿嶄綔緋葷粺閮芥敮鎸佽澶氫俊鍙楓傚挨
鍏舵槸UNIX錛屾瘮杈冮噸瑕佸簲鐢ㄧ▼搴忎竴鑸兘浼氬鐞嗕俊鍙楓俇NIX瀹氫箟浜嗚澶氫俊鍙鳳紝姣斿SIGINT
琛ㄧず涓柇瀛楃淇″彿錛屼篃灝辨槸Ctrl+C鐨勪俊鍙鳳紝SIGBUS琛ㄧず紜歡鏁呴殰鐨勪俊鍙鳳紱SIGCHLD琛ㄧず
瀛愯繘紼嬬姸鎬佹敼鍙樹俊鍙鳳紱SIGKILL琛ㄧず緇堟紼嬪簭榪愯鐨勪俊鍙鳳紝絳夌瓑銆備俊鍙烽噺緙栫▼鏄疷NIX涓?br>闈炲父閲嶈鐨勪竴縐嶆妧鏈?
GDB鏈夎兘鍔涘湪浣犺皟璇曠▼搴忕殑鏃跺欏鐞嗕換浣曚竴縐嶄俊鍙鳳紝浣犲彲浠ュ憡璇塆DB闇瑕佸鐞嗗摢涓縐嶄俊
鍙楓備綘鍙互瑕佹眰GDB鏀跺埌浣犳墍鎸囧畾鐨勪俊鍙鋒椂錛岄┈涓婂仠浣忔鍦ㄨ繍琛岀殑紼嬪簭錛屼互渚涗綘榪涜璋冭瘯銆?br>浣犲彲浠ョ敤GDB鐨刪andle鍛戒護鏉ュ畬鎴愯繖涓鍔熻兘銆?
handle
鍦℅DB涓畾涔変竴涓俊鍙峰鐞嗐備俊鍙峰彲浠ヤ互SIG寮澶存垨涓嶄互SIG寮澶達紝鍙互鐢ㄥ畾涔変竴涓澶?br>鐞嗕俊鍙風殑鑼冨洿錛堝錛歋IGIO-SIGKILL錛岃〃紺哄鐞嗕粠SIGIO淇″彿鍒癝IGKILL鐨勪俊鍙鳳紝鍏朵腑鍖?br>鎷琒IGIO錛孲IGIOT錛孲IGKILL涓変釜淇″彿錛夛紝涔熷彲浠ヤ嬌鐢ㄥ叧閿瓧all鏉ユ爣鏄庤澶勭悊鎵鏈夌殑淇″彿銆?br>涓鏃﹁璋冭瘯鐨勭▼搴忔帴鏀跺埌淇″彿錛岃繍琛岀▼搴忛┈涓婁細琚獹DB鍋滀綇錛屼互渚涜皟璇曘傚叾鍙互鏄互涓嬪嚑
縐嶅叧閿瓧鐨勪竴涓垨澶氫釜銆?
nostop
褰撹璋冭瘯鐨勭▼搴忔敹鍒頒俊鍙鋒椂錛孏DB涓嶄細鍋滀綇紼嬪簭鐨勮繍琛岋紝浣嗕細鎵撳嚭娑堟伅鍛婅瘔浣犳敹鍒拌繖縐嶄俊
鍙楓?
stop
褰撹璋冭瘯鐨勭▼搴忔敹鍒頒俊鍙鋒椂錛孏DB浼氬仠浣忎綘鐨勭▼搴忋?
print
褰撹璋冭瘯鐨勭▼搴忔敹鍒頒俊鍙鋒椂錛孏DB浼氭樉紺哄嚭涓鏉′俊鎭?
noprint
褰撹璋冭瘯鐨勭▼搴忔敹鍒頒俊鍙鋒椂錛孏DB涓嶄細鍛婅瘔浣犳敹鍒頒俊鍙風殑淇℃伅銆?
pass
noignore
褰撹璋冭瘯鐨勭▼搴忔敹鍒頒俊鍙鋒椂錛孏DB涓嶅鐞嗕俊鍙楓傝繖琛ㄧず錛孏DB浼氭妸榪欎釜淇″彿浜ょ粰琚皟璇曠▼
搴忎細澶勭悊銆?
nopass
ignore
褰撹璋冭瘯鐨勭▼搴忔敹鍒頒俊鍙鋒椂錛孏DB涓嶄細璁╄璋冭瘯紼嬪簭鏉ュ鐞嗚繖涓俊鍙楓?
info signals
info handle
鏌ョ湅鏈夊摢浜涗俊鍙峰湪琚獹DB媯嫻嬩腑銆?
鍗併佺嚎紼嬶紙Thread Stops錛?
濡傛灉浣犵▼搴忔槸澶氱嚎紼嬬殑璇濓紝浣犲彲浠ュ畾涔変綘鐨勬柇鐐規槸鍚﹀湪鎵鏈夌殑綰跨▼涓婏紝鎴栨槸鍦ㄦ煇涓壒瀹氱殑綰?br>紼嬨侴DB寰堝鏄撳府浣犲畬鎴愯繖涓宸ヤ綔銆?
break thread
break thread if ...
linespec鎸囧畾浜嗘柇鐐硅緗湪鐨勬簮紼嬪簭鐨勮鍙楓倀hreadno鎸囧畾浜嗙嚎紼嬬殑ID錛屾敞鎰忥紝榪欎釜ID鏄?br>GDB鍒嗛厤鐨勶紝浣犲彲浠ラ氳繃“info threads”鍛戒護鏉ユ煡鐪嬫鍦ㄨ繍琛岀▼搴忎腑鐨勭嚎紼嬩俊鎭傚鏋滀綘
涓嶆寚瀹歵hread 鍒欒〃紺轟綘鐨勬柇鐐硅鍦ㄦ墍鏈夌嚎紼嬩笂闈€備綘榪樺彲浠ヤ負鏌愮嚎紼嬫寚瀹氭柇鐐規潯浠躲傚錛?
(gdb) break frik.c:13 thread 28 if bartab > lim
褰撲綘鐨勭▼搴忚GDB鍋滀綇鏃訛紝鎵鏈夌殑榪愯綰跨▼閮戒細琚仠浣忋傝繖鏂逛究浣犱綘鏌ョ湅榪愯紼嬪簭鐨勬諱綋
鎯呭喌銆傝屽湪浣犳仮澶嶇▼搴忚繍琛屾椂錛屾墍鏈夌殑綰跨▼涔熶細琚仮澶嶈繍琛屻傞偅鎬曟槸涓昏繘紼嬪湪琚崟姝ヨ皟璇曟椂銆?
鏌ョ湅鏍堜俊鎭?
鈥斺斺斺斺?
褰撶▼搴忚鍋滀綇浜嗭紝浣犻渶瑕佸仛鐨勭涓浠朵簨灝辨槸鏌ョ湅紼嬪簭鏄湪鍝噷鍋滀綇鐨勩傚綋浣犵殑紼嬪簭璋冪敤浜嗕竴
涓嚱鏁幫紝鍑芥暟鐨勫湴鍧錛屽嚱鏁板弬鏁幫紝鍑芥暟鍐呯殑灞閮ㄥ彉閲忛兘浼氳鍘嬪叆“鏍?#8221;錛圫tack錛変腑銆備綘鍙互
鐢℅DB鍛戒護鏉ユ煡鐪嬪綋鍓嶇殑鏍堜腑鐨勪俊鎭?
涓嬮潰鏄竴浜涙煡鐪嬪嚱鏁拌皟鐢ㄦ爤淇℃伅鐨凣DB鍛戒護錛?
backtrace
bt
鎵撳嵃褰撳墠鐨勫嚱鏁拌皟鐢ㄦ爤鐨勬墍鏈変俊鎭傚錛?
(gdb) bt
#0 func (n=250) at tst.c:6
#1 0x08048524 in main (argc=1, argv=0xbffff674) at tst.c:30
#2 0x400409ed in __libc_start_main () from /lib/libc.so.6
浠庝笂鍙互鐪嬪嚭鍑芥暟鐨勮皟鐢ㄦ爤淇℃伅錛歘_libc_start_main --> main() --> func()
backtrace
bt
n鏄竴涓鏁存暟錛岃〃紺哄彧鎵撳嵃鏍堥《涓妌灞傜殑鏍堜俊鎭?
backtrace <-n>
bt <-n>
-n琛ㄤ竴涓礋鏁存暟錛岃〃紺哄彧鎵撳嵃鏍堝簳涓媙灞傜殑鏍堜俊鎭?
濡傛灉浣犺鏌ョ湅鏌愪竴灞傜殑淇℃伅錛屼綘闇瑕佸湪鍒囨崲褰撳墠鐨勬爤錛屼竴鑸潵璇達紝紼嬪簭鍋滄鏃訛紝鏈欏跺眰鐨勬爤
灝辨槸褰撳墠鏍堬紝濡傛灉浣犺鏌ョ湅鏍堜笅闈㈠眰鐨勮緇嗕俊鎭紝棣栧厛瑕佸仛鐨勬槸鍒囨崲褰撳墠鏍堛?
frame
f
n鏄竴涓粠0寮濮嬬殑鏁存暟錛屾槸鏍堜腑鐨勫眰緙栧彿銆傛瘮濡傦細frame 0錛岃〃紺烘爤欏訛紝frame 1錛岃〃紺烘爤鐨?br>絎簩灞傘?
up
琛ㄧず鍚戞爤鐨勪笂闈㈢Щ鍔╪灞傦紝鍙互涓嶆墦n錛岃〃紺哄悜涓婄Щ鍔ㄤ竴灞傘?
down
琛ㄧず鍚戞爤鐨勪笅闈㈢Щ鍔╪灞傦紝鍙互涓嶆墦n錛岃〃紺哄悜涓嬬Щ鍔ㄤ竴灞傘?
涓婇潰鐨勫懡浠わ紝閮戒細鎵撳嵃鍑虹Щ鍔ㄥ埌鐨勬爤灞傜殑淇℃伅銆傚鏋滀綘涓嶆兂璁╁叾鎵撳嚭淇℃伅銆備綘鍙互浣跨敤榪欎笁
涓懡浠わ細
select-frame 瀵瑰簲浜?frame 鍛戒護銆?
up-silently 瀵瑰簲浜?up 鍛戒護銆?
down-silently 瀵瑰簲浜?down 鍛戒護銆?
鏌ョ湅褰撳墠鏍堝眰鐨勪俊鎭紝浣犲彲浠ョ敤浠ヤ笅GDB鍛戒護錛?
frame 鎴?f
浼氭墦鍗板嚭榪欎簺淇℃伅錛氭爤鐨勫眰緙栧彿錛屽綋鍓嶇殑鍑芥暟鍚嶏紝鍑芥暟鍙傛暟鍊鹼紝鍑芥暟鎵鍦ㄦ枃浠跺強琛屽彿錛屽嚱鏁?br>鎵ц鍒扮殑璇彞銆?
info frame
info f
榪欎釜鍛戒護浼氭墦鍗板嚭鏇翠負璇︾粏鐨勫綋鍓嶆爤灞傜殑淇℃伅錛屽彧涓嶈繃錛屽ぇ澶氭暟閮芥槸榪愯鏃剁殑鍐呭唴鍦板潃銆傛瘮
濡傦細鍑芥暟鍦板潃錛岃皟鐢ㄥ嚱鏁扮殑鍦板潃錛岃璋冪敤鍑芥暟鐨勫湴鍧錛岀洰鍓嶇殑鍑芥暟鏄敱浠涔堟牱鐨勭▼搴忚璦鍐?br>鎴愮殑銆佸嚱鏁板弬鏁板湴鍧鍙婂箋佸眬閮ㄥ彉閲忕殑鍦板潃絳夌瓑銆傚錛?
(gdb) info f
Stack level 0, frame at 0xbffff5d4:
eip = 0x804845d in func (tst.c:6); saved eip 0x8048524
called by frame at 0xbffff60c
source language c.
Arglist at 0xbffff5d4, args: n=250
Locals at 0xbffff5d4, Previous frame's sp is 0x0
Saved registers:
ebp at 0xbffff5d4, eip at 0xbffff5d8
info args
鎵撳嵃鍑哄綋鍓嶅嚱鏁扮殑鍙傛暟鍚嶅強鍏跺箋?
info locals
鎵撳嵃鍑哄綋鍓嶅嚱鏁頒腑鎵鏈夊眬閮ㄥ彉閲忓強鍏跺箋?
info catch
鎵撳嵃鍑哄綋鍓嶇殑鍑芥暟涓殑寮傚父澶勭悊淇℃伅銆?
鏌ョ湅婧愮▼搴?
鈥斺斺斺斺?
涓銆佹樉紺烘簮浠g爜
GDB 鍙互鎵撳嵃鍑烘墍璋冭瘯紼嬪簭鐨勬簮浠g爜錛屽綋鐒訛紝鍦ㄧ▼搴忕紪璇戞椂涓瀹氳鍔犱笂-g鐨勫弬鏁幫紝鎶婃簮紼?br>搴忎俊鎭紪璇戝埌鎵ц鏂囦歡涓備笉鐒跺氨鐪嬩笉鍒版簮紼嬪簭浜嗐傚綋紼嬪簭鍋滀笅鏉ヤ互鍚庯紝GDB浼氭姤鍛婄▼搴?br>鍋滃湪浜嗛偅涓枃浠剁殑絎嚑琛屼笂銆備綘鍙互鐢╨ist鍛戒護鏉ユ墦鍗扮▼搴忕殑婧愪唬鐮併傝繕鏄潵鐪嬩竴鐪嬫煡鐪嬫簮
浠g爜鐨凣DB鍛戒護鍚с?
list
鏄劇ず紼嬪簭絎琹inenum琛岀殑鍛ㄥ洿鐨勬簮紼嬪簭銆?
list
鏄劇ず鍑芥暟鍚嶄負function鐨勫嚱鏁扮殑婧愮▼搴忋?
list
鏄劇ず褰撳墠琛屽悗闈㈢殑婧愮▼搴忋?
list -
鏄劇ず褰撳墠琛屽墠闈㈢殑婧愮▼搴忋?
涓鑸槸鎵撳嵃褰撳墠琛岀殑涓?琛屽拰涓?琛岋紝濡傛灉鏄劇ず鍑芥暟鏄槸涓?琛屼笅8琛岋紝榛樿鏄?0琛岋紝褰?br>鐒訛紝浣犱篃鍙互瀹氬埗鏄劇ず鐨勮寖鍥達紝浣跨敤涓嬮潰鍛戒護鍙互璁劇疆涓嬈℃樉紺烘簮紼嬪簭鐨勮鏁般?
set listsize
璁劇疆涓嬈℃樉紺烘簮浠g爜鐨勮鏁般?
show listsize
鏌ョ湅褰撳墠listsize鐨勮緗?
list鍛戒護榪樻湁涓嬮潰鐨勭敤娉曪細
list ,
鏄劇ず浠巉irst琛屽埌last琛屼箣闂寸殑婧愪唬鐮併?
list ,
鏄劇ず浠庡綋鍓嶈鍒發ast琛屼箣闂寸殑婧愪唬鐮併?
list +
寰鍚庢樉紺烘簮浠g爜銆?
涓鑸潵璇村湪list鍚庨潰鍙互璺熶互涓嬭繖浠殑鍙傛暟錛?
琛屽彿銆?
<+offset> 褰撳墠琛屽彿鐨勬鍋忕Щ閲忋?
<-offset> 褰撳墠琛屽彿鐨勮礋鍋忕Щ閲忋?
鍝釜鏂囦歡鐨勫摢涓琛屻?
鍑芥暟鍚嶃?
鍝釜鏂囦歡涓殑鍝釜鍑芥暟銆?
<*address> 紼嬪簭榪愯鏃剁殑璇彞鍦ㄥ唴瀛樹腑鐨勫湴鍧銆?
浜屻佹悳绱㈡簮浠g爜
涓嶄粎濡傛錛孏DB榪樻彁渚涗簡婧愪唬鐮佹悳绱㈢殑鍛戒護錛?
forward-search
search
鍚戝墠闈㈡悳绱€?
reverse-search
鍏ㄩ儴鎼滅儲銆?
鍏朵腑錛屽氨鏄鍒欒〃杈懼紡錛屼篃涓諱竴涓瓧絎︿覆鐨勫尮閰嶆ā寮忥紝鍏充簬姝e垯琛ㄨ揪寮忥紝鎴戝氨涓嶅湪榪欓噷璁蹭簡錛?br>榪樿鍚勪綅鏌ョ湅鐩稿叧璧勬枡銆?
涓夈佹寚瀹氭簮鏂囦歡鐨勮礬寰?
鏌愪簺鏃跺欙紝鐢?g緙栬瘧榪囧悗鐨勬墽琛岀▼搴忎腑鍙槸鍖呮嫭浜嗘簮鏂囦歡鐨勫悕瀛楋紝娌℃湁璺緞鍚嶃侴DB鎻愪緵
浜嗗彲浠ヨ浣犳寚瀹氭簮鏂囦歡鐨勮礬寰勭殑鍛戒護錛屼互渚縂DB榪涜鎼滅儲銆?
directory
dir
鍔犱竴涓簮鏂囦歡璺緞鍒板綋鍓嶈礬寰勭殑鍓嶉潰銆傚鏋滀綘瑕佹寚瀹氬涓礬寰勶紝UNIX涓嬩綘鍙互浣跨敤“:”錛?br>Windows涓嬩綘鍙互浣跨敤“;”銆?
directory
娓呴櫎鎵鏈夌殑鑷畾涔夌殑婧愭枃浠舵悳绱㈣礬寰勪俊鎭?
show directories
鏄劇ず瀹氫箟浜嗙殑婧愭枃浠舵悳绱㈣礬寰勩?
鍥涖佹簮浠g爜鐨勫唴瀛?
浣犲彲浠ヤ嬌鐢╥nfo line鍛戒護鏉ユ煡鐪嬫簮浠g爜鍦ㄥ唴瀛樹腑鐨勫湴鍧銆俰nfo line鍚庨潰鍙互璺?#8220;琛屽彿”錛?#8220;鍑?br>鏁板悕”錛?#8220;鏂囦歡鍚?琛屽彿”錛?#8220;鏂囦歡鍚?鍑芥暟鍚?#8221;錛岃繖涓懡浠や細鎵撳嵃鍑烘墍鎸囧畾鐨勬簮鐮佸湪榪愯鏃剁殑鍐?br>瀛樺湴鍧錛屽錛?
(gdb) info line tst.c:func
Line 5 of "tst.c" starts at address 0x8048456 and ends at 0x804845d .
榪樻湁涓涓懡浠わ紙disassemble錛変綘鍙互鏌ョ湅婧愮▼搴忕殑褰撳墠鎵ц鏃剁殑鏈哄櫒鐮侊紝榪欎釜鍛戒護浼氭妸鐩墠
鍐呭瓨涓殑鎸囦護dump鍑烘潵銆傚涓嬮潰鐨勭ず渚嬭〃紺烘煡鐪嬪嚱鏁癴unc鐨勬眹緙栦唬鐮併?
(gdb) disassemble func
Dump of assembler code for function func:
0x8048450 : push %ebp
0x8048451 : mov %esp,%ebp
0x8048453 : sub $0x18,%esp
0x8048456 : movl $0x0,0xfffffffc(%ebp)
0x804845d : movl $0x1,0xfffffff8(%ebp)
0x8048464 : mov 0xfffffff8(%ebp),%eax
0x8048467 : cmp 0x8(%ebp),%eax
0x804846a : jle 0x8048470
0x804846c : jmp 0x8048480
0x804846e : mov %esi,%esi
0x8048470 : mov 0xfffffff8(%ebp),%eax
0x8048473 : add %eax,0xfffffffc(%ebp)
0x8048476 : incl 0xfffffff8(%ebp)
0x8048479 : jmp 0x8048464
0x804847b : nop
0x804847c : lea 0x0(%esi,1),%esi
0x8048480 : mov 0xfffffffc(%ebp),%edx
0x8048483 : mov %edx,%eax
0x8048485 : jmp 0x8048487
0x8048487 : mov %ebp,%esp
0x8048489 : pop %ebp
0x804848a : ret
End of assembler dump.
鏌ョ湅榪愯鏃舵暟鎹?
鈥斺斺斺斺斺斺?
鍦ㄤ綘璋冭瘯紼嬪簭鏃訛紝褰撶▼搴忚鍋滀綇鏃訛紝浣犲彲浠ヤ嬌鐢╬rint鍛戒護錛堢畝鍐欏懡浠や負p錛夛紝鎴栨槸鍚屼箟鍛戒護
inspect鏉ユ煡鐪嬪綋鍓嶇▼搴忕殑榪愯鏁版嵁銆俻rint鍛戒護鐨勬牸寮忔槸錛?
print
print /
鏄〃杈懼紡錛屾槸浣犳墍璋冭瘯鐨勭▼搴忕殑璇█鐨勮〃杈懼紡錛圙DB鍙互璋冭瘯澶氱緙栫▼璇█錛夛紝鏄緭鍑虹殑鏍?br>寮忥紝姣斿錛屽鏋滆鎶婅〃杈懼紡鎸?6榪涘埗鐨勬牸寮忚緭鍑猴紝閭d箞灝辨槸/x銆?
涓銆佽〃杈懼紡
print鍜岃澶欸DB鐨勫懡浠や竴鏍鳳紝鍙互鎺ュ彈涓涓〃杈懼紡錛孏DB浼氭牴鎹綋鍓嶇殑紼嬪簭榪愯鐨勬暟鎹?br>鏉ヨ綆楄繖涓〃杈懼紡錛屾棦鐒舵槸琛ㄨ揪寮忥紝閭d箞灝卞彲浠ユ槸褰撳墠紼嬪簭榪愯涓殑const甯擱噺銆佸彉閲忋佸嚱
鏁扮瓑鍐呭銆傚彲鎯滅殑鏄疓DB涓嶈兘浣跨敤浣犲湪紼嬪簭涓墍瀹氫箟鐨勫畯銆?
琛ㄨ揪寮忕殑璇硶搴旇鏄綋鍓嶆墍璋冭瘯鐨勮璦鐨勮娉曪紝鐢變簬C/C++鏄竴縐嶅ぇ浼楀瀷鐨勮璦錛屾墍浠ワ紝鏈?br>鏂囦腑鐨勪緥瀛愰兘鏄叧浜嶤/C++鐨勩傦紙鑰屽叧浜庣敤GDB璋冭瘯鍏跺畠璇█鐨勭珷鑺傦紝鎴戝皢鍦ㄥ悗闈粙緇嶏級
鍦ㄨ〃杈懼紡涓紝鏈夊嚑縐岹DB鎵鏀寔鐨勬搷浣滅錛屽畠浠彲浠ョ敤鍦ㄤ換浣曚竴縐嶈璦涓?
@
鏄竴涓拰鏁扮粍鏈夊叧鐨勬搷浣滅錛屽湪鍚庨潰浼氭湁鏇磋緇嗙殑璇存槑銆?
::
鎸囧畾涓涓湪鏂囦歡鎴栨槸涓涓嚱鏁頒腑鐨勫彉閲忋?
{}
琛ㄧず涓涓寚鍚戝唴瀛樺湴鍧鐨勭被鍨嬩負type鐨勪竴涓璞°?
浜屻佺▼搴忓彉閲?
鍦℅DB涓紝浣犲彲浠ラ殢鏃舵煡鐪嬩互涓嬩笁縐嶅彉閲忕殑鍊鹼細
1銆佸叏灞鍙橀噺錛堟墍鏈夋枃浠跺彲瑙佺殑錛?
2銆侀潤鎬佸叏灞鍙橀噺錛堝綋鍓嶆枃浠跺彲瑙佺殑錛?
3銆佸眬閮ㄥ彉閲忥紙褰撳墠Scope鍙鐨勶級
濡傛灉浣犵殑灞閮ㄥ彉閲忓拰鍏ㄥ眬鍙橀噺鍙戠敓鍐茬獊錛堜篃灝辨槸閲嶅悕錛夛紝涓鑸儏鍐典笅鏄眬閮ㄥ彉閲忎細闅愯棌鍏ㄥ眬
鍙橀噺錛屼篃灝辨槸璇達紝濡傛灉涓涓叏灞鍙橀噺鍜屼竴涓嚱鏁頒腑鐨勫眬閮ㄥ彉閲忓悓鍚嶆椂錛屽鏋滃綋鍓嶅仠姝㈢偣鍦ㄥ嚱
鏁頒腑錛岀敤print鏄劇ず鍑虹殑鍙橀噺鐨勫間細鏄嚱鏁頒腑鐨勫眬閮ㄥ彉閲忕殑鍊箋傚鏋滄鏃朵綘鎯蟲煡鐪嬪叏灞鍙橀噺
鐨勫兼椂錛屼綘鍙互浣跨敤“::”鎿嶄綔絎︼細
file::variable
function::variable
鍙互閫氳繃榪欑褰㈠紡鎸囧畾浣犳墍鎯蟲煡鐪嬬殑鍙橀噺錛屾槸鍝釜鏂囦歡涓殑鎴栨槸鍝釜鍑芥暟涓殑銆備緥濡傦紝鏌ョ湅
鏂囦歡f2.c涓殑鍏ㄥ眬鍙橀噺x鐨勫鹼細
gdb) p 'f2.c'::x
褰撶劧錛?#8220;::”鎿嶄綔絎︿細鍜孋++涓殑鍙戠敓鍐茬獊錛孏DB鑳借嚜鍔ㄨ瘑鍒?#8220;::” 鏄惁C++鐨勬搷浣滅錛屾墍
浠ヤ綘涓嶅繀鎷呭績鍦ㄨ皟璇旵++紼嬪簭鏃朵細鍑虹幇寮傚父銆?
鍙﹀錛岄渶瑕佹敞鎰忕殑鏄紝濡傛灉浣犵殑紼嬪簭緙栬瘧鏃跺紑鍚簡浼樺寲閫夐」錛岄偅涔堝湪鐢℅DB璋冭瘯琚紭鍖栬繃
鐨勭▼搴忔椂錛屽彲鑳戒細鍙戠敓鏌愪簺鍙橀噺涓嶈兘璁塊棶錛屾垨鏄彇鍊奸敊璇爜鐨勬儏鍐點傝繖涓槸寰堟甯哥殑錛屽洜涓?br>浼樺寲紼嬪簭浼氬垹鏀逛綘鐨勭▼搴忥紝鏁寸悊浣犵▼搴忕殑璇彞欏哄簭錛屽墧闄や竴浜涙棤鎰忎箟鐨勫彉閲忕瓑錛屾墍浠ュ湪GDB
璋冭瘯榪欑紼嬪簭鏃訛紝榪愯鏃剁殑鎸囦護鍜屼綘鎵緙栧啓鎸囦護灝辨湁涓嶄竴鏍鳳紝涔熷氨浼氬嚭鐜頒綘鎵鎯寵薄涓嶅埌鐨勭粨
鏋溿傚浠樿繖縐嶆儏鍐墊椂錛岄渶瑕佸湪緙栬瘧紼嬪簭鏃跺叧闂紪璇戜紭鍖栥備竴鑸潵璇達紝鍑犱箮鎵鏈夌殑緙栬瘧鍣ㄩ兘鏀?br>鎸佺紪璇戜紭鍖栫殑寮鍏籌紝渚嬪錛孏NU鐨凜/C++緙栬瘧鍣℅CC錛屼綘鍙互浣跨敤“-gstabs”閫夐」鏉ヨВ鍐?br>榪欎釜闂銆傚叧浜庣紪璇戝櫒鐨勫弬鏁幫紝榪樿鏌ョ湅緙栬瘧鍣ㄧ殑浣跨敤璇存槑鏂囨。銆?
涓夈佹暟緇?
鏈夋椂鍊欙紝浣犻渶瑕佹煡鐪嬩竴孌佃繛緇殑鍐呭瓨絀洪棿鐨勫箋傛瘮濡傛暟緇勭殑涓孌碉紝鎴栨槸鍔ㄦ佸垎閰嶇殑鏁版嵁鐨勫ぇ
灝忋備綘鍙互浣跨敤GDB鐨?#8220;@”鎿嶄綔絎︼紝“@”鐨勫乏杈規槸絎竴涓唴瀛樼殑鍦板潃鐨勫鹼紝“@”鐨勫彸
杈瑰垯浣犱綘鎯蟲煡鐪嬪唴瀛樼殑闀垮害銆備緥濡傦紝浣犵殑紼嬪簭涓湁榪欐牱鐨勮鍙ワ細
int *array = (int *) malloc (len * sizeof (int));
浜庢槸錛屽湪GDB璋冭瘯榪囩▼涓紝浣犲彲浠ヤ互濡備笅鍛戒護鏄劇ず鍑鴻繖涓姩鎬佹暟緇勭殑鍙栧鹼細
p *array@len
@鐨勫乏杈規槸鏁扮粍鐨勯鍦板潃鐨勫鹼紝涔熷氨鏄彉閲廰rray鎵鎸囧悜鐨勫唴瀹癸紝鍙寵竟鍒欐槸鏁版嵁鐨勯暱搴︼紝鍏?br>淇濆瓨鍦ㄥ彉閲弆en涓紝鍏惰緭鍑虹粨鏋滐紝澶х害鏄笅闈㈣繖涓牱瀛愮殑錛?
(gdb) p *array@len
$1 = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40}
濡傛灉鏄潤鎬佹暟緇勭殑璇濓紝鍙互鐩存帴鐢╬rint鏁扮粍鍚嶏紝灝卞彲浠ユ樉紺烘暟緇勪腑鎵鏈夋暟鎹殑鍐呭浜嗐?
鍥涖佽緭鍑烘牸寮?
涓鑸潵璇達紝GDB浼氭牴鎹彉閲忕殑綾誨瀷杈撳嚭鍙橀噺鐨勫箋備絾浣犱篃鍙互鑷畾涔塆DB鐨勮緭鍑虹殑鏍煎紡銆?br>渚嬪錛屼綘鎯寵緭鍑轟竴涓暣鏁扮殑鍗佸叚榪涘埗錛屾垨鏄簩榪涘埗鏉ユ煡鐪嬭繖涓暣鍨嬪彉閲忕殑涓殑浣嶇殑鎯呭喌銆傝
鍋氬埌榪欐牱錛屼綘鍙互浣跨敤GDB鐨勬暟鎹樉紺烘牸寮忥細
x 鎸夊崄鍏繘鍒舵牸寮忔樉紺哄彉閲忋?
d 鎸夊崄榪涘埗鏍煎紡鏄劇ず鍙橀噺銆?
u 鎸夊崄鍏繘鍒舵牸寮忔樉紺烘棤絎﹀彿鏁村瀷銆?
o 鎸夊叓榪涘埗鏍煎紡鏄劇ず鍙橀噺銆?
t 鎸変簩榪涘埗鏍煎紡鏄劇ず鍙橀噺銆?
a 鎸夊崄鍏繘鍒舵牸寮忔樉紺哄彉閲忋?
c 鎸夊瓧絎︽牸寮忔樉紺哄彉閲忋?
f 鎸夋誕鐐規暟鏍煎紡鏄劇ず鍙橀噺銆?
(gdb) p i
$21 = 101
(gdb) p/a i
$22 = 0x65
(gdb) p/c i
$23 = 101 'e'
(gdb) p/f i
$24 = 1.41531145e-43
(gdb) p/x i
$25 = 0x65
(gdb) p/t i
$26 = 1100101
浜斻佹煡鐪嬪唴瀛?
浣犲彲浠ヤ嬌鐢╡xamine鍛戒護錛堢畝鍐欐槸x錛夋潵鏌ョ湅鍐呭瓨鍦板潃涓殑鍊箋倄鍛戒護鐨勮娉曞涓嬫墍紺猴細
x/
n銆乫銆乽鏄彲閫夌殑鍙傛暟銆?
n 鏄竴涓鏁存暟錛岃〃紺烘樉紺哄唴瀛樼殑闀垮害錛屼篃灝辨槸璇翠粠褰撳墠鍦板潃鍚戝悗鏄劇ず鍑犱釜鍦板潃鐨勫唴瀹廣?
f 琛ㄧず鏄劇ず鐨勬牸寮忥紝鍙傝涓婇潰銆傚鏋滃湴鍧鎵鎸囩殑鏄瓧絎︿覆錛岄偅涔堟牸寮忓彲浠ユ槸s錛屽鏋滃湴鍗佹槸
鎸囦護鍦板潃錛岄偅涔堟牸寮忓彲浠ユ槸i銆?
u 琛ㄧず浠庡綋鍓嶅湴鍧寰鍚庤姹傜殑瀛楄妭鏁幫紝濡傛灉涓嶆寚瀹氱殑璇濓紝GDB榛樿鏄?涓猙ytes銆倁鍙傛暟鍙?br>浠ョ敤涓嬮潰鐨勫瓧絎︽潵浠f浛錛宐琛ㄧず鍗曞瓧鑺傦紝h琛ㄧず鍙屽瓧鑺傦紝w琛ㄧず鍥涘瓧鑺傦紝g琛ㄧず鍏瓧鑺傘傚綋
鎴戜滑鎸囧畾浜嗗瓧鑺傞暱搴﹀悗錛孏DB浼氫粠鎸囧唴瀛樺畾鐨勫唴瀛樺湴鍧寮濮嬶紝璇誨啓鎸囧畾瀛楄妭錛屽茍鎶婂叾褰撲綔
涓涓煎彇鍑烘潵銆?
琛ㄧず涓涓唴瀛樺湴鍧銆?
n/f/u涓変釜鍙傛暟鍙互涓璧蜂嬌鐢ㄣ備緥濡傦細
鍛戒護錛歺/3uh 0x54320 琛ㄧず錛屼粠鍐呭瓨鍦板潃0x54320璇誨彇鍐呭錛宧琛ㄧず浠ュ弻瀛楄妭涓轟竴涓崟浣嶏紝3
琛ㄧず涓変釜鍗曚綅錛寀琛ㄧず鎸夊崄鍏繘鍒舵樉紺恒?
鍏佽嚜鍔ㄦ樉紺?
浣犲彲浠ヨ緗竴浜涜嚜鍔ㄦ樉紺虹殑鍙橀噺錛屽綋紼嬪簭鍋滀綇鏃訛紝鎴栨槸鍦ㄤ綘鍗曟璺熻釜鏃訛紝榪欎簺鍙橀噺浼氳嚜鍔ㄦ樉
紺恒傜浉鍏崇殑GDB鍛戒護鏄痙isplay銆?
display
display/
display/
expr鏄竴涓〃杈懼紡錛宖mt琛ㄧず鏄劇ず鐨勬牸寮忥紝addr琛ㄧず鍐呭瓨鍦板潃錛屽綋浣犵敤display璁懼畾濂戒簡涓
涓垨澶氫釜琛ㄨ揪寮忓悗錛屽彧瑕佷綘鐨勭▼搴忚鍋滀笅鏉ワ紝GDB浼氳嚜鍔ㄦ樉紺轟綘鎵璁劇疆鐨勮繖浜涜〃杈懼紡鐨勫箋?
鏍煎紡i鍜宻鍚屾牱琚玠isplay鏀寔錛屼竴涓潪甯告湁鐢ㄧ殑鍛戒護鏄細
display/i $pc
$pc鏄疓DB鐨勭幆澧冨彉閲忥紝琛ㄧず鐫鎸囦護鐨勫湴鍧錛?i鍒欒〃紺鴻緭鍑烘牸寮忎負鏈哄櫒鎸囦護鐮侊紝涔熷氨鏄眹
緙栥備簬鏄綋紼嬪簭鍋滀笅鍚庯紝灝變細鍑虹幇婧愪唬鐮佸拰鏈哄櫒鎸囦護鐮佺浉瀵瑰簲鐨勬儏褰紝榪欐槸涓涓緢鏈夋剰鎬濈殑
鍔熻兘銆?
涓嬮潰鏄竴浜涘拰display鐩稿叧鐨凣DB鍛戒護錛?
undisplay
delete display
鍒犻櫎鑷姩鏄劇ず錛宒nums鎰忎負鎵璁劇疆濂戒簡鐨勮嚜鍔ㄦ樉寮忕殑緙栧彿銆傚鏋滆鍚屾椂鍒犻櫎鍑犱釜錛岀紪鍙峰彲浠?br>鐢ㄧ┖鏍煎垎闅旓紝濡傛灉瑕佸垹闄や竴涓寖鍥村唴鐨勭紪鍙鳳紝鍙互鐢ㄥ噺鍙瘋〃紺猴紙濡傦細2-5錛?
disable display
enable display
disable鍜宔nalbe涓嶅垹闄よ嚜鍔ㄦ樉紺虹殑璁劇疆錛岃屽彧鏄鍏跺け鏁堝拰鎭㈠銆?
info display
鏌ョ湅display璁劇疆鐨勮嚜鍔ㄦ樉紺虹殑淇℃伅銆侴DB浼氭墦鍑轟竴寮犺〃鏍鹼紝鍚戜綘鎶ュ憡褰撶劧璋冭瘯涓緗簡澶?br>灝戜釜鑷姩鏄劇ず璁劇疆錛屽叾涓寘鎷紝璁劇疆鐨勭紪鍙鳳紝琛ㄨ揪寮忥紝鏄惁enable銆?
涓冦佽緗樉紺洪夐」
GDB涓叧浜庢樉紺虹殑閫夐」姣旇緝澶氾紝榪欓噷鎴戝彧渚嬩婦澶у鏁板父鐢ㄧ殑閫夐」銆?
set print address
set print address on
鎵撳紑鍦板潃杈撳嚭錛屽綋紼嬪簭鏄劇ず鍑芥暟淇℃伅鏃訛紝GDB浼氭樉鍑哄嚱鏁扮殑鍙傛暟鍦板潃銆傜郴緇熼粯璁や負鎵撳紑鐨勶紝
濡傦細
(gdb) f
#0 set_quotes (lq=0x34c78 "<<", rq=0x34c88 ">>")
at input.c:530
530 if (lquote != def_lquote)
set print address off
鍏抽棴鍑芥暟鐨勫弬鏁板湴鍧鏄劇ず錛屽錛?
(gdb) set print addr off
(gdb) f
#0 set_quotes (lq="<<", rq=">>") at input.c:530
530 if (lquote != def_lquote)
show print address
鏌ョ湅褰撳墠鍦板潃鏄劇ず閫夐」鏄惁鎵撳紑銆?
set print array
set print array on
鎵撳紑鏁扮粍鏄劇ず錛屾墦寮鍚庡綋鏁扮粍鏄劇ず鏃訛紝姣忎釜鍏冪礌鍗犱竴琛岋紝濡傛灉涓嶆墦寮鐨勮瘽錛屾瘡涓厓绱犲垯浠ラ?br>鍙峰垎闅斻傝繖涓夐」榛樿鏄叧闂殑銆備笌涔嬬浉鍏崇殑涓や釜鍛戒護濡備笅錛屾垜灝變笉鍐嶅璇翠簡銆?
set print array off
show print array
set print elements
榪欎釜閫夐」涓昏鏄緗暟緇勭殑錛屽鏋滀綘鐨勬暟緇勫お澶т簡錛岄偅涔堝氨鍙互鎸囧畾涓涓潵鎸囧畾鏁版嵁鏄劇ず鐨?br>鏈澶ч暱搴︼紝褰撳埌杈捐繖涓暱搴︽椂錛孏DB灝變笉鍐嶅線涓嬫樉紺轟簡銆傚鏋滆緗負0錛屽垯琛ㄧず涓嶉檺鍒躲?
show print elements
鏌ョ湅print elements鐨勯夐」淇℃伅銆?
set print null-stop
濡傛灉鎵撳紑浜嗚繖涓夐」錛岄偅涔堝綋鏄劇ず瀛楃涓叉椂錛岄亣鍒扮粨鏉熺鍒欏仠姝㈡樉紺恒傝繖涓夐」榛樿涓簅ff銆?
set print pretty on
濡傛灉鎵撳紑printf pretty榪欎釜閫夐」錛岄偅涔堝綋GDB鏄劇ず緇撴瀯浣撴椂浼氭瘮杈冩紓浜傚錛?
$1 = {
next = 0x0,
flags = {
sweet = 1,
sour = 1
},
meat = 0x54 "Pork"
}
set print pretty off
鍏抽棴printf pretty榪欎釜閫夐」錛孏DB鏄劇ず緇撴瀯浣撴椂浼氬涓嬫樉紺猴細
$1 = {next = 0x0, flags = {sweet = 1, sour = 1}, meat = 0x54 "Pork"}
show print pretty
鏌ョ湅GDB鏄浣曟樉紺虹粨鏋勪綋鐨勩?
set print sevenbit-strings
璁劇疆瀛楃鏄劇ず錛屾槸鍚︽寜“\nnn”鐨勬牸寮忔樉紺猴紝濡傛灉鎵撳紑錛屽垯瀛楃涓叉垨瀛楃鏁版嵁鎸塡nnn鏄劇ず錛?br>濡?#8220;\065”銆?
show print sevenbit-strings
鏌ョ湅瀛楃鏄劇ず寮鍏蟲槸鍚︽墦寮銆?
set print union
璁劇疆鏄劇ず緇撴瀯浣撴椂錛屾槸鍚︽樉寮忓叾鍐呯殑鑱斿悎浣撴暟鎹備緥濡傛湁浠ヤ笅鏁版嵁緇撴瀯錛?
typedef enum {Tree, Bug} Species;
typedef enum {Big_tree, Acorn, Seedling} Tree_forms;
typedef enum {Caterpillar, Cocoon, Butterfly}
Bug_forms;
struct thing {
Species it;
union {
Tree_forms tree;
Bug_forms bug;
} form;
};
struct thing foo = {Tree, {Acorn}};
褰撴墦寮榪欎釜寮鍏蟲椂錛屾墽琛?p foo 鍛戒護鍚庯紝浼氬涓嬫樉紺猴細
$1 = {it = Tree, form = {tree = Acorn, bug = Cocoon}}
褰撳叧闂繖涓紑鍏蟲椂錛屾墽琛?p foo 鍛戒護鍚庯紝浼氬涓嬫樉紺猴細
$1 = {it = Tree, form = {...}}
show print union
鏌ョ湅鑱斿悎浣撴暟鎹殑鏄劇ず鏂瑰紡
set print object
鍦–++涓紝濡傛灉涓涓璞℃寚閽堟寚鍚戝叾媧劇敓綾伙紝濡傛灉鎵撳紑榪欎釜閫夐」錛孏DB浼氳嚜鍔ㄦ寜鐓ц櫄鏂規硶
璋冪敤鐨勮鍒欐樉紺鴻緭鍑猴紝濡傛灉鍏抽棴榪欎釜閫夐」鐨勮瘽錛孏DB灝變笉綆¤櫄鍑芥暟琛ㄤ簡銆傝繖涓夐」榛樿鏄?br>off銆?
show print object
鏌ョ湅瀵硅薄閫夐」鐨勮緗?
set print static-members
榪欎釜閫夐」琛ㄧず錛屽綋鏄劇ず涓涓狢++瀵硅薄涓殑鍐呭鏄紝鏄惁鏄劇ず鍏朵腑鐨勯潤鎬佹暟鎹垚鍛樸傞粯璁ゆ槸
on銆?
show print static-members
鏌ョ湅闈欐佹暟鎹垚鍛橀夐」璁劇疆銆?
set print vtbl
褰撴閫夐」鎵撳紑鏃訛紝GDB灝嗙敤姣旇緝瑙勬暣鐨勬牸寮忔潵鏄劇ず铏氬嚱鏁拌〃鏃躲傚叾榛樿鏄叧闂殑銆?
show print vtbl
鏌ョ湅铏氬嚱鏁版樉紺烘牸寮忕殑閫夐」銆?
鍏佸巻鍙茶褰?
褰撲綘鐢℅DB鐨刾rint鏌ョ湅紼嬪簭榪愯鏃剁殑鏁版嵁鏃訛紝浣犳瘡涓涓猵rint閮戒細琚獹DB璁板綍涓嬫潵銆侴DB
浼氫互$1, $2, $3 .....榪欐牱鐨勬柟寮忎負浣犳瘡涓涓猵rint鍛戒護緙栦笂鍙楓備簬鏄紝浣犲彲浠ヤ嬌鐢ㄨ繖涓紪鍙瘋闂?br>浠ュ墠鐨勮〃杈懼紡錛屽$1銆傝繖涓姛鑳芥墍甯︽潵鐨勫ソ澶勬槸錛屽鏋滀綘鍏堝墠杈撳叆浜嗕竴涓瘮杈冮暱鐨勮〃杈懼紡錛?br>濡傛灉浣犺繕鎯蟲煡鐪嬭繖涓〃杈懼紡鐨勫鹼紝浣犲彲浠ヤ嬌鐢ㄥ巻鍙茶褰曟潵璁塊棶錛岀渷鍘諱簡閲嶅杈撳叆銆?
涔濄丟DB鐜鍙橀噺
浣犲彲浠ュ湪GDB鐨勮皟璇曠幆澧冧腑瀹氫箟鑷繁鐨勫彉閲忥紝鐢ㄦ潵淇濆瓨涓浜涜皟璇曠▼搴忎腑鐨勮繍琛屾暟鎹傝瀹?br>涔変竴涓狦DB鐨勫彉閲忓緢綆鍗曞彧闇銆備嬌鐢℅DB鐨剆et鍛戒護銆侴DB鐨勭幆澧冨彉閲忓拰UNIX涓鏍鳳紝
涔熸槸浠?璧峰ご銆傚錛?
set $foo = *object_ptr
浣跨敤鐜鍙橀噺鏃訛紝GDB浼氬湪浣犵涓嬈′嬌鐢ㄦ椂鍒涘緩榪欎釜鍙橀噺錛岃屽湪浠ュ悗鐨勪嬌鐢ㄤ腑錛屽垯鐩存帴瀵?br>鍏惰腸鍊箋傜幆澧冨彉閲忔病鏈夌被鍨嬶紝浣犲彲浠ョ粰鐜鍙橀噺瀹氫箟浠諱竴鐨勭被鍨嬨傚寘鎷粨鏋勪綋鍜屾暟緇勩?
show convenience
璇ュ懡浠ゆ煡鐪嬪綋鍓嶆墍璁劇疆鐨勬墍鏈夌殑鐜鍙橀噺銆?
榪欐槸涓涓瘮杈冨己澶х殑鍔熻兘錛岀幆澧冨彉閲忓拰紼嬪簭鍙橀噺鐨勪氦浜掍嬌鐢紝灝嗕嬌寰楃▼搴忚皟璇曟洿涓虹伒媧諱究鎹楓?br>渚嬪錛?
set $i = 0
print bar[$i++]->contents
浜庢槸錛屽綋浣犲氨涓嶅繀錛宲rint bar[0]->contents, print bar[1]->contents鍦拌緭鍏ュ懡浠や簡銆傝緭鍏ヨ繖鏍風殑
鍛戒護鍚庯紝鍙敤鏁插洖杞︼紝閲嶅鎵ц涓婁竴鏉¤鍙ワ紝鐜鍙橀噺浼氳嚜鍔ㄧ瘡鍔狅紝浠庤屽畬鎴愰愪釜杈撳嚭鐨勫姛
鑳姐?
鍗併佹煡鐪嬪瘎瀛樺櫒
瑕佹煡鐪嬪瘎瀛樺櫒鐨勫鹼紝寰堢畝鍗曪紝鍙互浣跨敤濡備笅鍛戒護錛?
info registers
鏌ョ湅瀵勫瓨鍣ㄧ殑鎯呭喌銆傦紙闄や簡嫻偣瀵勫瓨鍣級
info all-registers
鏌ョ湅鎵鏈夊瘎瀛樺櫒鐨勬儏鍐點傦紙鍖呮嫭嫻偣瀵勫瓨鍣級
info registers
鏌ョ湅鎵鎸囧畾鐨勫瘎瀛樺櫒鐨勬儏鍐點?
瀵勫瓨鍣ㄤ腑鏀劇疆浜嗙▼搴忚繍琛屾椂鐨勬暟鎹紝姣斿紼嬪簭褰撳墠榪愯鐨勬寚浠ゅ湴鍧錛坕p錛夛紝紼嬪簭鐨勫綋鍓嶅爢鏍?br>鍦板潃錛坰p錛夌瓑絳夈備綘鍚屾牱鍙互浣跨敤print鍛戒護鏉ヨ闂瘎瀛樺櫒鐨勬儏鍐碉紝鍙渶瑕佸湪瀵勫瓨鍣ㄥ悕瀛楀墠
鍔犱竴涓?絎﹀彿灝卞彲浠ヤ簡銆傚錛歱 $eip銆?
鏀瑰彉紼嬪簭鐨勬墽琛?
鈥斺斺斺斺斺斺?
涓鏃︿嬌鐢℅DB鎸備笂琚皟璇曠▼搴忥紝褰撶▼搴忚繍琛岃搗鏉ュ悗錛屼綘鍙互鏍規嵁鑷繁鐨勮皟璇曟濊礬鏉ュ姩鎬佸湴
鍦℅DB涓洿鏀瑰綋鍓嶈璋冭瘯紼嬪簭鐨勮繍琛岀嚎璺垨鏄叾鍙橀噺鐨勫鹼紝榪欎釜寮哄ぇ鐨勫姛鑳借兘澶熻浣犳洿濂?br>鐨勮皟璇曚綘鐨勭▼搴忥紝姣斿錛屼綘鍙互鍦ㄧ▼搴忕殑涓嬈¤繍琛屼腑璧伴亶紼嬪簭鐨勬墍鏈夊垎鏀?
涓銆佷慨鏀瑰彉閲忓?
淇敼琚皟璇曠▼搴忚繍琛屾椂鐨勫彉閲忓鹼紝鍦℅DB涓緢瀹規槗瀹炵幇錛屼嬌鐢℅DB鐨刾rint鍛戒護鍗沖彲瀹屾垚銆?br>濡傦細
(gdb) print x=4
x=4榪欎釜琛ㄨ揪寮忔槸C/C++鐨勮娉曪紝鎰忎負鎶婂彉閲弜鐨勫間慨鏀逛負4錛屽鏋滀綘褰撳墠璋冭瘯鐨勮璦鏄?br>Pascal錛岄偅涔堜綘鍙互浣跨敤Pascal鐨勮娉曪細x:=4銆?
鍦ㄦ煇浜涙椂鍊欙紝寰堟湁鍙兘浣犵殑鍙橀噺鍜孏DB涓殑鍙傛暟鍐茬獊錛屽錛?
(gdb) whatis width
type = double
(gdb) p width
$4 = 13
(gdb) set width=47
Invalid syntax in expression.
鍥犱負錛宻et width鏄疓DB鐨勫懡浠わ紝鎵浠ワ紝鍑虹幇浜?#8220;Invalid syntax in expression”鐨勮緗敊璇紝
姝ゆ椂錛屼綘鍙互浣跨敤set var鍛戒護鏉ュ憡璇塆DB錛寃idth涓嶆槸浣燝DB鐨勫弬鏁幫紝鑰屾槸紼嬪簭鐨勫彉閲忓悕錛?br>濡傦細
(gdb) set var width=47
鍙﹀錛岃繕鍙兘鏈変簺鎯呭喌錛孏DB騫朵笉鎶ュ憡榪欑閿欒錛屾墍浠ヤ繚闄╄搗瑙侊紝鍦ㄤ綘鏀瑰彉紼嬪簭鍙橀噺鍙栧?br>鏃訛紝鏈濂介兘浣跨敤set var鏍煎紡鐨凣DB鍛戒護銆?
浜屻佽煩杞墽琛?
涓鑸潵璇達紝琚皟璇曠▼搴忎細鎸夌収紼嬪簭浠g爜鐨勮繍琛岄『搴忎緷嬈℃墽琛屻侴DB鎻愪緵浜嗕貢搴忔墽琛岀殑鍔熻兘錛?br>涔熷氨鏄錛孏DB鍙互淇敼紼嬪簭鐨勬墽琛岄『搴忥紝鍙互璁╃▼搴忔墽琛岄殢鎰忚煩璺冦傝繖涓姛鑳藉彲浠ョ敱GDB
鐨刯ump鍛戒護鏉ュ畬錛?
jump
鎸囧畾涓嬩竴鏉¤鍙ョ殑榪愯鐐廣傚彲浠ユ槸鏂囦歡鐨勮鍙鳳紝鍙互鏄痜ile:line鏍煎紡錛屽彲浠ユ槸+num榪欑鍋?br>縐婚噺鏍煎紡銆傝〃寮忕潃涓嬩竴鏉¤繍琛岃鍙ヤ粠鍝噷寮濮嬨?
jump
榪欓噷鐨?
鏄唬鐮佽鐨勫唴瀛樺湴鍧銆?
娉ㄦ剰錛宩ump鍛戒護涓嶄細鏀瑰彉褰撳墠鐨勭▼搴忔爤涓殑鍐呭錛屾墍浠ワ紝褰撲綘浠庝竴涓嚱鏁拌煩鍒板彟涓涓嚱鏁?br>鏃訛紝褰撳嚱鏁拌繍琛屽畬榪斿洖鏃惰繘琛屽脊鏍堟搷浣滄椂蹇呯劧浼氬彂鐢熼敊璇紝鍙兘緇撴灉榪樻槸闈炲父濂囨殑錛岀敋鑷?br>浜庝駭鐢熺▼搴廋ore Dump銆傛墍浠ユ渶濂芥槸鍚屼竴涓嚱鏁頒腑榪涜璺寵漿銆?
鐔熸倝姹囩紪鐨勪漢閮界煡閬擄紝紼嬪簭榪愯鏃訛紝鏈変竴涓瘎瀛樺櫒鐢ㄤ簬淇濆瓨褰撳墠浠g爜鎵鍦ㄧ殑鍐呭瓨鍦板潃銆傛墍浠ワ紝
jump鍛戒護涔熷氨鏄敼鍙樹簡榪欎釜瀵勫瓨鍣ㄤ腑鐨勫箋備簬鏄紝浣犲彲浠ヤ嬌鐢?#8220;set $pc”鏉ユ洿鏀硅煩杞墽琛?br>鐨勫湴鍧銆傚錛?
set $pc = 0x485
涓夈佷駭鐢熶俊鍙烽噺
浣跨敤singal鍛戒護錛屽彲浠ヤ駭鐢熶竴涓俊鍙烽噺緇欒璋冭瘯鐨勭▼搴忋傚錛氫腑鏂俊鍙稢trl+C銆傝繖闈炲父鏂逛究
浜庣▼搴忕殑璋冭瘯錛屽彲浠ュ湪紼嬪簭榪愯鐨勪換鎰忎綅緗緗柇鐐癸紝騫跺湪璇ユ柇鐐圭敤GDB浜х敓涓涓俊鍙烽噺錛?br>榪欑綺劇‘鍦板湪鏌愬浜х敓淇″彿闈炲父鏈夊埄紼嬪簭鐨勮皟璇曘?
璇硶鏄細signal 錛孶NIX鐨勭郴緇熶俊鍙烽噺閫氬父浠?鍒?5銆傛墍浠ュ彇鍊間篃鍦ㄨ繖涓寖鍥淬?
single鍛戒護鍜宻hell鐨刱ill鍛戒護涓嶅悓錛岀郴緇熺殑kill鍛戒護鍙戜俊鍙風粰琚皟璇曠▼搴忔椂錛屾槸鐢盙DB鎴?br>鑾風殑錛岃宻ingle鍛戒護鎵鍙戝嚭涓淇″彿鍒欐槸鐩存帴鍙戠粰琚皟璇曠▼搴忕殑銆?
鍥涖佸己鍒跺嚱鏁拌繑鍥?
濡傛灉浣犵殑璋冭瘯鏂偣鍦ㄦ煇涓嚱鏁頒腑錛屽茍榪樻湁璇彞娌℃湁鎵ц瀹屻備綘鍙互浣跨敤return鍛戒護寮哄埗鍑芥暟
蹇界暐榪樻病鏈夋墽琛岀殑璇彞騫惰繑鍥炪?
return
return
浣跨敤return鍛戒護鍙栨秷褰撳墠鍑芥暟鐨勬墽琛岋紝騫剁珛鍗寵繑鍥烇紝濡傛灉鎸囧畾浜嗭紝閭d箞璇ヨ〃杈懼紡鐨勫間細琚
浣滃嚱鏁扮殑榪斿洖鍊箋?
浜斻佸己鍒惰皟鐢ㄥ嚱鏁?
call
琛ㄨ揪寮忎腑鍙互涓鏄嚱鏁幫紝浠ユ杈懼埌寮哄埗璋冪敤鍑芥暟鐨勭洰鐨勩傚茍鏄劇ず鍑芥暟鐨勮繑鍥炲鹼紝濡傛灉鍑芥暟榪?br>鍥炲兼槸void錛岄偅涔堝氨涓嶆樉紺恒?
鍙︿竴涓浉浼肩殑鍛戒護涔熷彲浠ュ畬鎴愯繖涓鍔熻兘鈥斺攑rint錛宲rint鍚庨潰鍙互璺熻〃杈懼紡錛屾墍浠ヤ篃鍙互鐢ㄤ粬
鏉ヨ皟鐢ㄥ嚱鏁幫紝print鍜宑all鐨勪笉鍚屾槸錛屽鏋滃嚱鏁拌繑鍥瀡oid錛宑all鍒欎笉鏄劇ず錛宲rint鍒欐樉紺哄嚱鏁拌繑
鍥炲鹼紝騫舵妸璇ュ煎瓨鍏ュ巻鍙叉暟鎹腑銆?
鍦ㄤ笉鍚岃璦涓嬌鐢℅DB
鈥斺斺斺斺斺斺斺斺斺?
GDB鏀寔涓嬪垪璇█錛欳, C++, Fortran, PASCAL, Java, Chill, assembly, 鍜?Modula-2銆備竴鑸
鏉ワ紝GDB浼氭牴鎹綘鎵璋冭瘯鐨勭▼搴忔潵紜畾褰撶劧鐨勮皟璇曡璦錛屾瘮濡傦細鍙戠幇鏂囦歡鍚嶅悗緙涓?#8220;.c”
鐨勶紝GDB浼氳涓烘槸C紼嬪簭銆傛枃浠跺悕鍚庣紑涓?#8220;.C, .cc, .cp, .cpp, .cxx, .c++”鐨勶紝GDB浼氳涓烘槸
C++紼嬪簭銆傝屽悗緙鏄?#8220;.f, .F”鐨勶紝GDB浼氳涓烘槸Fortran紼嬪簭錛岃繕鏈夛紝鍚庣紑涓哄鏋滄槸“.s, .S”
鐨勪細璁や負鏄眹緙栬璦銆?
涔熷氨鏄錛孏DB浼氭牴鎹綘鎵璋冭瘯鐨勭▼搴忕殑璇█錛屾潵璁劇疆鑷繁鐨勮璦鐜錛屽茍璁〨DB鐨勫懡浠?br>璺熺潃璇█鐜鐨勬敼鍙樿屾敼鍙樸傛瘮濡備竴浜汫DB鍛戒護闇瑕佺敤鍒拌〃杈懼紡鎴栧彉閲忔椂錛岃繖浜涜〃杈懼紡鎴?br>鍙橀噺鐨勮娉曪紝瀹屽叏鏄牴鎹綋鍓嶇殑璇█鐜鑰屾敼鍙樼殑銆備緥濡侰/C++涓鎸囬拡鐨勮娉曟槸*p錛岃屽湪
Modula-2涓垯鏄痯^銆傚茍涓旓紝濡傛灉浣犲綋鍓嶇殑紼嬪簭鏄敱鍑犵涓嶅悓璇█涓鍚岀紪璇戞垚鐨勶紝閭e埌鍦ㄨ皟
璇曡繃紼嬩腑錛孏DB涔熻兘鏍規嵁涓嶅悓鐨勮璦鑷姩鍦板垏鎹㈣璦鐜銆傝繖縐嶈窡鐫璇█鐜鑰屾敼鍙樼殑鍔?br>鑳斤紝鐪熸槸浣撹創寮鍙戜漢鍛樼殑涓縐嶈璁°?
涓嬮潰鏄嚑涓浉鍏充簬GDB璇█鐜鐨勫懡浠わ細
show language
鏌ョ湅褰撳墠鐨勮璦鐜銆傚鏋淕DB涓嶈兘璇嗕負浣犳墍璋冭瘯鐨勭紪紼嬭璦錛岄偅涔堬紝C璇█琚涓烘槸榛?br>璁ょ殑鐜銆?
info frame
鏌ョ湅褰撳墠鍑芥暟鐨勭▼搴忚璦銆?
info source
鏌ョ湅褰撳墠鏂囦歡鐨勭▼搴忚璦銆?
濡傛灉GDB娌℃湁媯嫻嬪嚭褰撳墠鐨勭▼搴忚璦錛岄偅涔堜綘涔熷彲浠ユ墜鍔ㄨ緗綋鍓嶇殑紼嬪簭璇█銆備嬌鐢╯et
language鍛戒護鍗沖彲鍋氬埌銆?
褰搒et language鍛戒護鍚庝粈涔堜篃涓嶈窡鐨勮瘽錛屼綘鍙互鏌ョ湅GDB鎵鏀寔鐨勮璦縐嶇被錛?
(gdb) set language
The currently understood settings are:
local or auto Automatic setting based on source file
c Use the C language
c++ Use the C++ language
asm Use the Asm language
chill Use the Chill language
fortran Use the Fortran language
java Use the Java language
modula-2 Use the Modula-2 language
pascal Use the Pascal language
scheme Use the Scheme language
浜庢槸浣犲彲浠ュ湪set language鍚庤窡涓婅鍒楀嚭鏉ョ殑紼嬪簭璇█鍚嶏紝鏉ヨ緗綋鍓嶇殑璇█鐜銆?
鍚庤
鈥斺?
GDB鏄竴涓己澶х殑鍛戒護琛岃皟璇曞伐鍏楓傚ぇ瀹剁煡閬撳懡浠よ鐨勫己澶у氨鏄湪浜庯紝鍏跺彲浠ュ艦鎴愭墽琛屽簭
鍒楋紝褰㈡垚鑴氭湰銆俇NIX涓嬬殑杞歡鍏ㄦ槸鍛戒護琛岀殑錛岃繖緇欑▼搴忓紑鍙戞彁浠d緵浜嗘瀬澶х殑渚垮埄錛屽懡浠よ
杞歡鐨勪紭鍔垮湪浜庯紝瀹冧滑鍙互闈炲父瀹規槗鐨勯泦鎴愬湪涓璧鳳紝浣跨敤鍑犱釜綆鍗曠殑宸叉湁宸ュ叿鐨勫懡浠わ紝灝卞彲
浠ュ仛鍑轟竴涓潪甯稿己澶х殑鍔熻兘銆?
浜庢槸UNIX涓嬬殑杞歡姣擶indows涓嬬殑杞歡鏇磋兘鏈夋満鍦扮粨鍚堬紝鍚勮嚜鍙戞尌鍚勮嚜鐨勯暱澶勶紝緇勫悎鎴?br>鏇翠負寮哄姴鐨勫姛鑳姐傝學indows涓嬬殑鍥懼艦杞歡鍩烘湰涓婃槸鍚勮嚜涓鴻惀錛屼簰鐩鎬笉鑳借皟鐢紝寰堜笉鍒╀簬
鍚勭杞歡鐨勭浉浜掗泦鎴愩傚湪榪欓噷騫朵笉鏄鍜學indows鍋氫釜浠涔堟瘮杈冿紝鎵璋?#8220;瀵告湁鎵闀匡紝灝烘湁
鎵鐭?#8221;錛屽浘褰㈠寲宸ュ叿榪樻槸鏈変笉濡傚懡浠よ鐨勫湴鏂廣傦紙鐪嬪埌榪欏彞璇濇椂錛屽笇鏈涘悇浣嶅崈涓囧啀涔熶笉瑕佽涓?br>鎴戝氨鏄?#8220;閯欒鍥懼艦鐣岄潰”錛屽拰鎴戞姮鏉犱簡 錛?
鎴戞槸鏍規嵁鐗堟湰涓?.1.1鐨凣DB鎵鍐欑殑榪欑瘒鏂囩珷錛屾墍浠ュ彲鑳芥湁浜涘姛鑳藉凡琚慨鏀癸紝鎴栨槸鍙堟湁鏇?br>涓哄己鍔茬殑鍔熻兘銆傝屼笖錛屾垜鍐欏緱闈炲父浠撲績錛屽啓寰楁瘮杈冪畝鐣ワ紝騫朵笖錛屽叾涓垜宸茬粡鐪嬪埌鏈夎澶氶敊鍒?br>瀛椾簡錛堟垜鐢ㄤ簲絎旓紝鎵浠ラ敊瀛楄浣犵湅涓嶆噦錛夛紝鎵浠ワ紝鎴戝湪榪欓噷瀵規垜鏂囦腑鐨勫樊閿欒〃紺轟竾鍒嗙殑姝夋剰銆?
鏂囦腑鎵緗楀垪鐨凣DB鐨勫姛鑳芥椂錛屾垜鍙槸緗楀垪浜嗕竴浜涘甫鐢ㄧ殑GDB鐨勫懡浠ゅ拰浣跨敤鏂規硶錛屽叾瀹烇紝
鎴戣繖閲屽彧璁茶堪鐨勫姛鑳藉ぇ綰﹀彧鍗燝DB鎵鏈夊姛鑳界殑60%鍚э紝璇︾粏鐨勬枃妗o紝榪樻槸璇鋒煡鐪婫DB鐨?br>甯姪鍜屼嬌鐢ㄦ墜鍐屽惂錛屾垨璁革紝榪囨鏃墮棿錛屽鏋滄垜鏈夌┖錛屾垜鍐嶅啓涓綃嘒DB鐨勯珮綰т嬌鐢ㄣ?
鎴戜釜浜洪潪甯稿枩嬈DB鐨勮嚜鍔ㄨ皟璇曠殑鍔熻兘錛岃繖涓姛鑳界湡鐨勫緢寮哄ぇ錛岃瘯鎯籌紝鎴戝湪UNIX涓嬪啓涓?br>鑴氭湰錛岃鑴氭湰鑷姩緙栬瘧鎴戠殑紼嬪簭錛岃鑷姩璋冭瘯錛屽茍鎶婄粨鏋滄姤鍛婂嚭鏉ワ紝璋冭瘯鎴愬姛錛岃嚜鍔╟heckin
婧愮爜搴撱備竴涓懡浠わ紝緙栬瘧甯︾潃璋冭瘯甯︾潃checkin錛屽鐖藉晩銆傚彧鏄疓DB瀵硅嚜鍔ㄥ寲璋冭瘯鐩墠鏀寔
榪樹笉鏄緢鎴愮啛錛屽彧鑳藉疄鐜板崐鑷姩鍖栵紝鐪熷績鏈熸湜鐫GDB鐨勮嚜鍔ㄥ寲璋冭瘯鍔熻兘鐨勬垚鐔熴?
濡傛灉鍚勪綅瀵笹DB鎴栨槸鍒殑鎶鏈棶棰樻湁鍏磋叮鐨勮瘽錛屾榪庡拰鎴戣璁轟氦嫻併傛湰浜虹洰鍓嶄富瑕佸湪UNIX
涓嬪仛浜у搧杞歡鐨勫紑鍙戯紝鎵浠ワ紝瀵筓NIX涓嬬殑杞歡寮鍙戞瘮杈冪啛鎮夛紝褰撶劧錛屼笉鍗曞崟鏄妧鏈紝瀵硅蔣
浠跺伐紼嬪疄鏂斤紝杞歡璁捐錛岀郴緇熷垎鏋愶紝欏圭洰綆$悊鎴戜篃鐣ユ湁蹇冨緱銆傛榪庡ぇ瀹舵壘鎴戜氦嫻侊紝錛圦Q鏄細
753640錛孧SN鏄細haoel@hotmail.com錛?
RelatedEntries錛?
鏂囦歡鎿嶄綔 - 10 28, 2003
OSW:12.CVS璁劇疆涓庡簲鐢?- 10 28, 2003
MySQL AB Acquires Alzato - 10 24, 2003
cvs - 10 24, 2003
浣跨敤CVS榪涜鐗堟湰綆$悊 - 10 23, 2003
value_type& front( ); const value_type& front( ) const;
Returns a reference to the first element at the front of the queue.
璇風湅涓嬮潰紺轟緥浠g爜
queue<int> intqueue;
intqueue.push(1);
intqueue.push(2);
int head = intqueue.front();//int&鍙互闅愬紡杞崲涓篿nt?
intqueue.pop();//灝嗗澶村厓绱犲脊鍑洪槦鍒?br>cout << head << endl;//杈撳嚭1錛宖ront搴旇榪斿洖鐨勬槸"寮曠敤",浣唒op涔嬪悗錛屼負浠涔坔ead鐨勮緭鍑鴻繕鏈夋晥(寮曠敤榪樻湁鏁堬紵)錛?br>
}
lock_.UnLock();
}
return instance_;
}
protected:
static CAutoLock lock_ ;
static T* instance_;
};
template <class T>
CAutoLock SingleTon<T>::lock_;
template<class T>
T* SingleTon<T>::instance_;
if(ret != 0)
{
cout<<"query error"<<endl;
cout << mysql_error(conn_ptr) << endl;
}
}
|
鏂囦歡 I/O 鍦–++涓瘮鐑よ泲緋曠畝鍗曞浜嗐?鍦ㄨ繖綃囨枃绔犻噷錛屾垜浼氳緇嗚В閲夾SCII鍜屼簩榪涘埗鏂囦歡鐨勮緭鍏ヨ緭鍑虹殑姣忎釜緇嗚妭錛屽煎緱娉ㄦ剰鐨勬槸錛屾墍鏈夎繖浜涢兘鏄敤C++瀹屾垚鐨勩?br>
銆銆涓銆丄SCII 杈撳嚭 銆銆涓轟簡浣跨敤涓嬮潰鐨勬柟娉? 浣犲繀欏誨寘鍚ご鏂囦歡<fstream.h>(璇戣呮敞錛氬湪鏍囧噯C++涓紝宸茬粡浣跨敤<fstream>鍙栦唬< fstream.h>錛屾墍鏈夌殑C++鏍囧噯澶存枃浠墮兘鏄棤鍚庣紑鐨勩?銆傝繖鏄?<iostream.h>鐨勪竴涓墿灞曢泦, 鎻愪緵鏈夌紦鍐茬殑鏂囦歡杈撳叆杈撳嚭鎿嶄綔. 浜嬪疄涓? <iostream.h> 宸茬粡琚?lt;fstream.h>鍖呭惈浜? 鎵浠ヤ綘涓嶅繀鍖呭惈鎵鏈夎繖涓や釜鏂囦歡, 濡傛灉浣犳兂鏄懼紡鍖呭惈浠栦滑錛岄偅闅忎究浣犮傛垜浠粠鏂囦歡鎿嶄綔綾葷殑璁捐寮濮? 鎴戜細璁茶В濡備綍榪涜ASCII I/O鎿嶄綔銆傚鏋滀綘鐚滄槸"fstream," 鎭枩浣犵瓟瀵逛簡錛?浣嗚繖綃囨枃绔犱粙緇嶇殑鏂規硶,鎴戜滑鍒嗗埆浣跨敤"ifstream"?鍜?"ofstream" 鏉ヤ綔杈撳叆杈撳嚭銆?br> 銆銆濡傛灉浣犵敤榪囨爣鍑嗘帶鍒跺彴嫻?cin"?鍜?"cout," 閭g幇鍦ㄧ殑浜嬫儏瀵逛綘鏉ヨ寰堢畝鍗曘?鎴戜滑鐜板湪寮濮嬭杈撳嚭閮ㄥ垎錛岄鍏堝0鏄庝竴涓被瀵硅薄銆俹fstream fout; 銆銆榪欏氨鍙互浜嗭紝涓嶈繃浣犺鎵撳紑涓涓枃浠剁殑璇? 蹇呴』鍍忚繖鏍瘋皟鐢╫fstream::open()銆?br> fout.open("output.txt"); 銆銆浣犱篃鍙互鎶婃枃浠跺悕浣滀負鏋勯犲弬鏁版潵鎵撳紑涓涓枃浠? ofstream fout("output.txt"); 銆銆榪欐槸鎴戜滑浣跨敤鐨勬柟娉? 鍥犱負榪欐牱鍒涘緩鍜屾墦寮涓涓枃浠剁湅璧鋒潵鏇寸畝鍗? 欏轟究璇翠竴鍙? 濡傛灉浣犺鎵撳紑鐨勬枃浠朵笉瀛樺湪錛屽畠浼氫負浣犲垱寤轟竴涓? 鎵浠ヤ笉鐢ㄦ媴蹇冩枃浠跺垱寤虹殑闂. 鐜板湪灝辮緭鍑哄埌鏂囦歡錛岀湅璧鋒潵鍜?cout"鐨勬搷浣滃緢鍍忋?瀵逛笉浜嗚В鎺у埗鍙拌緭鍑?cout"鐨勪漢, 榪欓噷鏈変釜渚嬪瓙銆?br> int num = 150; char name[] = "John Doe"; fout << "Here is a number: " << num << "\n"; fout << "Now here is a string: " << name << "\n"; 銆銆鐜板湪淇濆瓨鏂囦歡錛屼綘蹇呴』鍏抽棴鏂囦歡錛屾垨鑰呭洖鍐欐枃浠剁紦鍐? 鏂囦歡鍏抽棴涔嬪悗灝變笉鑳藉啀鎿嶄綔浜? 鎵浠ュ彧鏈夊湪浣犱笉鍐嶆搷浣滆繖涓枃浠剁殑鏃跺欐墠璋冪敤瀹冿紝瀹冧細鑷姩淇濆瓨鏂囦歡銆?鍥炲啓緙撳啿鍖轟細鍦ㄤ繚鎸佹枃浠舵墦寮鐨勬儏鍐典笅淇濆瓨鏂囦歡, 鎵浠ュ彧瑕佹湁蹇呰灝變嬌鐢ㄥ畠銆傚洖鍐欑湅璧鋒潵鍍忓彟涓嬈¤緭鍑? 鐒跺悗璋冪敤鏂規硶鍏抽棴銆傚儚榪欐牱錛?br> fout << flush; fout.close(); 銆銆 鐜板湪浣犵敤鏂囨湰緙栬緫鍣ㄦ墦寮鏂囦歡錛屽唴瀹圭湅璧鋒潵鏄繖鏍鳳細 銆銆Here is a number: 150 Now here is a string: John Doe 銆銆寰堢畝鍗曞惂! 鐜板湪緇х畫鏂囦歡杈撳叆, 闇瑕佷竴鐐規妧宸? 鎵浠ュ厛紜浣犲凡緇忔槑鐧戒簡嫻佹搷浣滐紝瀵?"<<" 鍜?>>" 姣旇緝鐔熸倝浜? 鍥犱負浣犳帴涓嬫潵榪樿鐢ㄥ埌浠栦滑銆傜戶緇?#8230; 銆銆浜屻丄SCII 杈撳叆 銆銆杈撳叆鍜?cin" 嫻佸緢鍍? 鍜屽垰鍒氳璁虹殑杈撳嚭嫻佸緢鍍? 浣嗕綘瑕佽冭檻鍑犱歡浜嬫儏銆傚湪鎴戜滑寮濮嬪鏉傜殑鍐呭涔嬪墠, 鍏堢湅涓涓枃鏈細 銆銆12 GameDev 15.45 L This is really awesome! 銆銆涓轟簡鎵撳紑榪欎釜鏂囦歡錛屼綘蹇呴』鍒涘緩涓涓猧n-stream瀵硅薄,?鍍忚繖鏍楓?br> ifstream fin("input.txt"); 銆銆鐜板湪璇誨叆鍓嶅洓琛? 浣犺繕璁板緱鎬庝箞鐢?<<" 鎿嶄綔絎﹀線嫻侀噷鎻掑叆鍙橀噺鍜岀鍙峰惂錛熷ソ,?鍦?"<<" (鎻掑叆)?鎿嶄綔絎︿箣鍚庯紝鏄?>>" (鎻愬彇) 鎿嶄綔絎? 浣跨敤鏂規硶鏄竴鏍風殑. 鐪嬭繖涓唬鐮佺墖孌? int number; float real; char letter, word[8]; fin >> number; fin >> word; fin >> real; fin >> letter; 銆銆涔熷彲浠ユ妸榪欏洓琛岃鍙栨枃浠剁殑浠g爜鍐欎負鏇寸畝鍗曠殑涓琛屻?br> fin >> number >> word >> real >> letter; 銆銆瀹冩槸濡備綍榪愪綔鐨勫憿? 鏂囦歡鐨勬瘡涓┖鐧戒箣鍚? ">>" 鎿嶄綔絎︿細鍋滄璇誨彇鍐呭, 鐩村埌閬囧埌鍙︿竴涓?gt;>鎿嶄綔絎? 鍥犱負鎴戜滑璇誨彇鐨勬瘡涓琛岄兘琚崲琛岀鍒嗗壊寮(鏄┖鐧藉瓧絎?, ">>" 鎿嶄綔絎﹀彧鎶婅繖涓琛岀殑鍐呭璇誨叆鍙橀噺銆傝繖灝辨槸榪欎釜浠g爜涔熻兘姝e父宸ヤ綔鐨勫師鍥犮備絾鏄紝鍙埆蹇樹簡鏂囦歡鐨勬渶鍚庝竴琛屻?br> 銆銆This is really awesome! 銆銆濡傛灉浣犳兂鎶婃暣琛岃鍏ヤ竴涓猚har鏁扮粍, 鎴戜滑娌″姙娉曠敤">>"?鎿嶄綔絎︼紝鍥犱負姣忎釜鍗曡瘝涔嬮棿鐨勭┖鏍鹼紙絀虹櫧瀛楃錛変細涓鏂囦歡鐨勮鍙栥備負浜嗛獙璇侊細 char sentence[101]; fin >> sentence; 銆銆鎴戜滑鎯沖寘鍚暣涓彞瀛? "This is really awesome!" 浣嗘槸鍥犱負絀虹櫧, 鐜板湪瀹冨彧鍖呭惈浜?This". 寰堟槑鏄? 鑲畾鏈夎鍙栨暣琛岀殑鏂規硶, 瀹冨氨鏄痝etline()銆傝繖灝辨槸鎴戜滑瑕佸仛鐨勩?br> fin.getline(sentence, 100); 銆銆榪欐槸鍑芥暟鍙傛暟. 絎竴涓弬鏁版樉鐒舵槸鐢ㄦ潵鎺ュ彈鐨刢har鏁扮粍. 絎簩涓弬鏁版槸鍦ㄩ亣鍒版崲琛岀涔嬪墠錛屾暟緇勫厑璁告帴鍙楃殑鏈澶у厓绱犳暟閲? 鐜板湪鎴戜滑寰楀埌浜嗘兂瑕佺殑緇撴灉錛?#8220;This is really awesome!”銆?br> 銆銆浣犲簲璇ュ凡緇忕煡閬撳浣曡鍙栧拰鍐欏叆ASCII鏂囦歡浜嗐備絾鎴戜滑榪樹笉鑳界艦浼戯紝鍥犱負浜岃繘鍒舵枃浠惰繕鍦ㄧ瓑鐫鎴戜滑銆?br> 銆銆涓夈佷簩榪涘埗 杈撳叆杈撳嚭 銆銆浜岃繘鍒舵枃浠朵細澶嶆潅涓鐐? 浣嗚繕鏄緢綆鍗曠殑銆傞鍏堜綘瑕佹敞鎰忔垜浠笉鍐嶄嬌鐢ㄦ彃鍏ュ拰鎻愬彇鎿嶄綔絎?璇戣呮敞錛?lt;< 鍜?>> 鎿嶄綔絎?. 浣犲彲浠ヨ繖涔堝仛錛屼絾瀹冧笉浼氱敤浜岃繘鍒舵柟寮忚鍐欍備綘蹇呴』浣跨敤read() 鍜寃rite() 鏂規硶璇誨彇鍜屽啓鍏ヤ簩榪涘埗鏂囦歡. 鍒涘緩涓涓簩榪涘埗鏂囦歡, 鐪嬩笅涓琛屻?br> ofstream fout("file.dat", ios::binary); 銆銆榪欎細浠ヤ簩榪涘埗鏂瑰紡鎵撳紑鏂囦歡, 鑰屼笉鏄粯璁ょ殑ASCII妯″紡銆傞鍏堜粠鍐欏叆鏂囦歡寮濮嬨傚嚱鏁皐rite() 鏈変袱涓弬鏁般?絎竴涓槸鎸囧悜瀵硅薄鐨刢har綾誨瀷鐨勬寚閽? 絎簩涓槸瀵硅薄鐨勫ぇ灝忥紙璇戣呮敞錛氬瓧鑺傛暟錛夈?涓轟簡璇存槑錛岀湅渚嬪瓙銆?br> int number = 30; fout.write((char *)(&number), sizeof(number)); 銆銆絎竴涓弬鏁板啓鍋?(char *)(&number)". 榪欐槸鎶婁竴涓暣鍨嬪彉閲忚漿涓篶har *鎸囬拡銆傚鏋滀綘涓嶇悊瑙o紝鍙互绔嬪埢緲婚槄C++鐨勪功綾嶏紝濡傛灉鏈夊繀瑕佺殑璇濄傜浜屼釜鍙傛暟鍐欎綔"sizeof(number)". sizeof() 榪斿洖瀵硅薄澶у皬鐨勫瓧鑺傛暟. 灝辨槸榪欐牱! 銆銆浜岃繘鍒舵枃浠舵渶濂界殑鍦版柟鏄彲浠ュ湪涓琛屾妸涓涓粨鏋勫啓鍏ユ枃浠躲?濡傛灉璇達紝浣犵殑緇撴瀯鏈?2涓笉鍚岀殑鎴愬憳銆?鐢ˋSCII?鏂囦歡錛屼綘涓嶅緱涓嶆瘡嬈′竴鏉$殑鍐欏叆鎵鏈夋垚鍛樸?浣嗕簩榪涘埗鏂囦歡鏇夸綘鍋氬ソ浜嗐?鐪嬭繖涓?br> struct OBJECT { int number; char letter; } obj; obj.number = 15; obj.letter = ‘M’; fout.write((char *)(&obj), sizeof(obj)); 銆銆榪欐牱灝卞啓鍏ヤ簡鏁翠釜緇撴瀯! 鎺ヤ笅鏉ユ槸杈撳叆. 杈撳叆涔熷緢綆鍗曪紝鍥犱負read()?鍑芥暟鐨勫弬鏁板拰 write()鏄畬鍏ㄤ竴鏍風殑, 浣跨敤鏂規硶涔熺浉鍚屻?br> ifstream fin("file.dat", ios::binary); fin.read((char *)(&obj), sizeof(obj)); 銆銆鎴戜笉澶氳В閲婄敤娉? 鍥犱負瀹冨拰write()鏄畬鍏ㄧ浉鍚岀殑銆備簩榪涘埗鏂囦歡姣擜SCII鏂囦歡綆鍗? 浣嗘湁涓己鐐規槸鏃犳硶鐢ㄦ枃鏈紪杈戝櫒緙栬緫銆?鎺ョ潃, 鎴戣В閲婁竴涓媔fstream 鍜宱fstream 瀵硅薄鐨勫叾 |
浣跨敤 <multimap> 搴撳垱寤洪噸澶嶉敭鍏寵仈瀹瑰櫒
浣滆咃細Danny Kalev
緙栬瘧錛歍T 宸ヤ綔瀹?/p>
鍘熸枃鍑哄錛?a target=_blank>Use multimap to Create Associative Containers with Duplicate Keys
| 鎽樿錛?/strong>鏍囧噯搴撶殑 multimap 瀹瑰櫒涓?map 鍏寵仈瀹瑰櫒闈炲父綾諱技鈥斺斾絾鏄紝multimap 鍏佽閲嶅閿傝繖涓壒鎬т嬌寰?multimap 姣旀兂璞$殑瑕佹湁鐢ㄥ緱澶氥傛湰鏂囧皢瀵逛箣榪涜鎺㈣銆?/td> |
// 娉? 浼爜
multimap <string, string> phonebook;
phonebook.insert("Harry","8225687"); // 瀹墮噷鐢佃瘽
phonebook.insert("Harry","555123123"); // 鍗曚綅鐢佃瘽
phonebook.insert("Harry"," 2532532532"); // 縐誨姩鐢佃瘽
銆銆鍦?multimap 涓兘瀛樺偍閲嶅閿殑鑳藉姏澶уぇ鍦板獎鍝嶅畠鐨勬帴鍙e拰浣跨敤銆傞偅涔堝浣曞垱寤洪潪鍞竴閿殑鍏寵仈瀹瑰櫒鍛紵絳旀鏄嬌鐢ㄥ湪 <map> 搴撲腑瀹氫箟鐨?multimap 瀹瑰櫒銆?br>
鎻愬嚭闂
銆銆涓?map 涓嶅悓錛宮ultimap 鍙互鍖呭惈閲嶅閿傝繖灝卞甫鏉ヤ竴涓棶棰橈細閲嶈澆涓嬫爣鎿嶄綔絎﹀浣曡繑鍥炵浉鍚岄敭鐨勫涓叧鑱斿鹼紵浠ヤ笅闈㈢殑浼爜涓轟緥錛?/p>
string phone=phonebook["Harry];
銆銆鏍囧噯搴?/font>璁捐鑰呯殑瑙e喅榪欎釜闂鏂規硶鏄粠 multimap 涓幓鎺変笅鏍囨搷浣滅銆傚洜姝わ紝闇瑕佺敤涓嶅悓鐨勬柟娉曟潵鎻掑叆鍜岃幏鍙栧厓绱犱互鍙婂拰榪涜閿欒澶勭悊銆?br>
鎻掑叆
銆銆鍋囪浣犻渶瑕佸紑鍙戜竴涓?DNS 鍚庡彴紼嬪簭錛堜篃灝辨槸 Windows 緋葷粺涓殑鏈嶅姟紼嬪簭錛夛紝璇ョ▼搴忓皢 IP 鍦板潃鏄犲皠鍖歸厤鐨?URL 涓層備綘鐭ラ亾鍦ㄦ煇浜涙儏鍐典笅錛岀浉鍚岀殑 IP 鍦板潃瑕佽鍏寵仈鍒板涓?URLs銆傝繖浜?URLs 鍏ㄩ兘鎸囧悜鐩稿悓鐨勭珯鐐廣傚湪榪欑鎯呭喌涓嬶紝浣犲簲璇ヤ嬌鐢?multimap錛岃屼笉鏄?map銆備緥濡傦細
#include <map>
#include <string>
multimap <string, string> DNS_daemon;
銆銆鐢?insert() 鎴愬憳鍑芥暟鑰屼笉鏄?a target=_blank>涓嬫爣鎿嶄綔絎?/font>鏉ユ彃鍏ュ厓绱犮俰nsert()鏈変竴涓?pair 綾誨瀷鐨勫弬鏁般傚湪“浣跨敤 <map> 搴撳垱寤哄叧鑱斿鍣?/font>”涓垜浠ず鑼冧簡濡備綍浣跨敤 make_pair() 杈呭姪鍑芥暟鏉ュ畬鎴愭浠誨姟銆備綘涔熷彲浠ヨ薄涓嬮潰榪欐牱浣跨敤瀹冿細
DNS_daemon.insert(make_pair("213.108.96.7","cppzone.com"));
銆銆鍦ㄤ笂闈㈢殑 insert()璋冪敤涓紝涓?“213.108.96.7”鏄敭錛?#8220;cppzone.com”鏄叾鍏寵仈鐨勫箋備互鍚庢彃鍏ョ殑鏄浉鍚岀殑閿紝涓嶅悓鐨勫叧鑱斿鹼細
DNS_daemon.insert(make_pair("213.108.96.7","cppluspluszone.com"));
銆銆鍥犳錛孌NS_daemon 鍖呭惈涓や釜鐢ㄧ浉鍚岄敭鍊肩殑鍏冪礌銆傛敞鎰?multimap::insert() 鍜?map::insert() 榪斿洖鐨勫兼槸涓嶅悓鐨勩?/p>
typedef pair <const Key, T> value_type;
iterator
insert(const value_type&); // #1 multimap
pair <iterator, bool>
insert(const value_type&); // #2 map
銆銆multimap::insert()鎴愬憳鍑芥暟榪斿洖鎸囧悜鏂版彃鍏ュ厓绱犵殑榪唬鎸囬拡錛屼篃灝辨槸 iterator錛坢ultimap::insert()鎬繪槸鑳芥墽琛屾垚鍔燂級銆備絾鏄?map::insert() 榪斿洖 pair<iterator, bool>錛屾澶?bool 鍊艱〃紺烘彃鍏ユ搷浣滄槸鍚︽垚鍔熴?br> find(k) 榪斿洖鎸囧悜絎竴涓笌閿?k 鍖歸厤鐨?pair 鐨勮凱浠f寚閽堬紝榪欏氨鏄錛屽綋浣犳兂瑕佹鏌ユ槸鍚﹀瓨鍦ㄨ嚦灝戜竴涓笌璇ラ敭鍏寵仈鐨勫兼椂錛屾垨鑰呭彧闇絎竴涓尮閰嶆椂錛岃繖涓嚱鏁版渶鏈夌敤銆備緥濡傦細 澶勭悊澶氫釜鍏寵仈鍊?/strong> 銆銆涓轟簡瀛樺彇 multimap 涓殑澶氫釜鍊鹼紝浣跨敤 equal_range()銆乴ower_bound()鍜?upper_bound()鎴愬憳鍑芥暟錛?br>equal_range(k)錛氳鍑芥暟鏌ユ壘鎵鏈変笌 k 鍏寵仈鐨勫箋傝繑鍥炶凱浠f寚閽堢殑 pair錛屽畠鏍囪寮濮嬪拰緇撴潫鑼冨洿銆備笅闈㈢殑渚嬪瓙鏄劇ず鎵鏈変笌閿?#8220;213.108.96.7”鍏寵仈鐨勫鹼細 銆銆lower_bound() 鍜?upper_bound()錛歭ower_bound(k) 鏌ユ壘絎竴涓笌閿?k 鍏寵仈鐨勫鹼紝鑰?upper_bound(k) 鏄煡鎵劇涓涓敭鍊兼瘮 k 澶х殑鍏冪礌銆備笅闈㈢殑渚嬪瓙紺鴻寖鐢?upper_bound()鏉ュ畾浣嶇涓涓叾閿煎ぇ浜?#8220;213.108.96.7”鐨勫厓绱犮傞氬父錛屽綋閿槸涓涓瓧絎︿覆鏃訛紝浼氭湁涓涓瘝鍏哥紪綰傛瘮杈冿細 濡傛灉浣犳兂鏄劇ず鍏跺悗鎵鏈夌殑鍊鹼紝鍙互鐢ㄤ笅闈㈣繖鏍風殑寰幆錛? 緇撹
鏌ユ壘鍗曚釜鍊?/strong>
銆銆涓?map 綾諱技錛宮ultimap 鍏峰涓や釜鐗堟湰閲嶈澆鐨?find()鎴愬憳鍑芥暟錛?/p>
iterator find(const key_type& k);
const_iterator find(const key_type& k) const;
typedef multimap <string, string> mmss;
void func(const mmss & dns)
{
mmss::const_iterator cit=dns.find("213.108.96.7");
if (cit != dns.end())
cout <<"213.108.96.7 found" <<endl;
else
cout <<"not found" <<endl;
}
銆銆count(k) 鎴愬憳鍑芥暟榪斿洖涓庣粰瀹氶敭鍏寵仈鐨勫煎緱鏁伴噺銆備笅闈㈢殑渚嬪瓙鎶ュ憡浜嗘湁澶氬皯涓笌閿?“213.108.96.7” 鍏寵仈鐨勫鹼細cout<<dns.count("213.108.96.7") //output: 2
<<" elements associated"<<endl;
typedef multimap <string, string>::const_iterator CIT;
typedef pair<CIT, CIT> Range;
Range range=dns.equal_range("213.108.96.7");
for(CIT i=range.first; i!=range.second; ++i)
cout << i->second << endl; //output: cpluspluszone.com
// cppzone.com
dns.insert(make_pair("219.108.96.70", "pythonzone.com"));
CIT cit=dns.upper_bound("213.108.96.7");
if (cit!=dns.end()) //found anything?
cout<<cit->second<<endl; //display: pythonzone.com
// 鎻掑叆鏈夌浉鍚岄敭鐨勫涓?
dns.insert(make_pair("219.108.96.70","pythonzone.com"));
dns.insert(make_pair("219.108.96.70","python-zone.com"));
// 鑾峰緱絎竴涓肩殑榪唬鎸囬拡
CIT cit=dns.upper_bound("213.108.96.7");
// 杈撳嚭: pythonzone.com錛宲ython-zone.com
while(cit!=dns.end())
{
銆銆銆cout<<cit->second<<endl;
銆銆銆++cit;
}
銆銆铏界劧 map 鍜?multimap 鍏鋒湁鐩稿悓鐨勬帴鍙o紝鍏墮噸瑕佸樊鍒湪浜庨噸澶嶉敭錛岃璁″拰浣跨敤瑕佸尯鍒寰呫傛澶栵紝榪樿娉ㄦ剰姣忎釜瀹瑰櫒閲?insert()鎴愬憳鍑芥暟鐨勭粏寰樊鍒?br>銆
浣滆呯畝浠?/strong>聽聽聽寰堝浜洪兘浣跨敤浼犵粺鐨凜
聽聽聽璁╂垜浠潵鐪嬩竴涓叿浣撶殑鑼冧緥銆傚亣璁句綘鎯蟲妸涓涓猧nt杞崲涓簊tring銆備負浜嗚揪鍒拌繖涓鐩殑錛屼綘蹇呴』閬靛驚濡備笅鐨勬楠わ細
1. 寤虹珛涓涓猻tringstream瀵硅薄錛?/span>
2.浣跨敤鎿嶄綔絎?/span><<鎻掑叆int鏁版嵁錛?/p>
3.浣跨敤鎿嶄綔絎?/span>>>鎶藉彇鍓嶉潰鎻掑叆鍒扮殑鏁版嵁鍒頒竴涓猻tring瀵硅薄涓?/p>
浠ヤ笅浠g爜琛屾紨紺轟簡榪欎簺姝ラ錛?/p>
int main(int argc, char *argv[]) 聽聽聽璇鋒敞鎰忔垜浠病鏈変嬌鐢ㄤ竴涓畝媧佺殑cast鎿嶄綔鎴栦竴涓ā寮忔爣蹇楁潵瀹炵幇stringstream杞崲銆傛搷浣滅<<鍜?gt;>浼氳嚜鍔ㄥ湴鍒犻櫎鍘熷鏁版嵁鐨勭被鍨嬪拰鐩爣鏁版嵁錛屽茍鑷姩鑰屽畨鍏ㄥ湴鎵ц闇瑕佺殑杞崲銆?/p>
int main(int argc, char *argv[]) 聽聽聽濡傛灉浣犳兂閫氳繃浣跨敤鍚屼竴stringstream瀵硅薄瀹炵幇澶氱綾誨瀷鐨勮漿鎹紝璇鋒敞鎰忓湪姣忎竴嬈¤漿鎹箣鍚庨兘蹇呴』璋冪敤clear()鎴愬憳鍑芥暟錛屼緥濡傦細
int main(int argc, char *argv[])
聽聽聽 cout << "n:\t" << n << endl;聽聽聽 //print 456 聽聽聽浜嬪疄涓婏紝stream瀵硅薄鍙互鎺ユ敹澶氱綾誨瀷杈撳叆鐨勭壒鐐圭粰鎴戜滑甯︽潵涓涓ソ澶勶紝鍙互灝唅nt錛宑har*絳変笉鍚岀被鍨嬬殑杈撳叆鍚屾椂瀵煎叆鍒頒竴涓猻tream瀵硅薄錛屽啀閫氳繃璇tream瀵硅薄瀵煎嚭涓涓柊鍊箋?/p>
int main(int argc, char *argv[])
聽聽聽 cout << "ip:\t" << ip << endl;聽聽聽 //print " 218.192.160.228" 聽聽聽
錛僫 nclude <iostream>
錛僫 nclude <stdlib.h>
錛僫 nclude <string>
錛僫 nclude <sstream>
using namespace std;
{
聽聽聽 std::stringstream stream;
聽聽聽 std::string result;
聽聽聽 int num = 1000;
聽聽聽
聽聽聽 stream << num;聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽聽聽聽聽聽聽//灝唅nt綾誨瀷鏁版嵁鎻掑叆stream瀵硅薄涓?br />聽聽聽 stream >> result;聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽聽聽聽聽聽聽//鍙栧嚭涔嬪墠鎻掑叆鐨勬暟鎹?br />聽聽聽 cout << "num:\t" << num << endl;
聽聽聽 cout << "result:\t" << result << endl;聽聽聽 //鎵撳嵃 "1000"聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽
聽聽聽 system("PAUSE");聽
聽聽聽 return 0;
}
錛僫 nclude <stdlib.h>
錛僫 nclude <string>
錛僫 nclude <sstream>
using namespace std;
{
聽聽聽 std::stringstream stream;
聽聽聽 char result[12] = {'\0'};
聽聽聽 stream << 1234;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //insert int to stream
聽聽聽 stream >> result;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //extract previously inserted value
聽聽聽 cout << result << endl;聽聽聽聽聽聽聽聽聽聽聽聽 // print "1234"聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽
聽聽聽 system("PAUSE");聽
聽聽聽 return 0;
}
錛僫 nclude <stdlib.h>
錛僫 nclude <string>
錛僫 nclude <sstream>
using namespace std;
{
聽聽聽 std::stringstream stream;
聽聽聽 int n, m;
聽聽聽 stream<< "456"; 聽聽聽聽聽聽//insert string
聽聽聽 stream >> n; 聽聽聽聽聽聽聽聽聽//extract to int
聽聽聽 stream.clear(); 聽聽聽聽聽聽//reset stream before another conversion
聽聽聽 stream<< true; 聽聽聽聽聽聽聽//insert bool value
聽聽聽 stream >> m; 聽聽聽聽聽聽聽聽聽//extract to int
聽聽聽 cout << "m:\t" << m << endl;聽聽聽 //print 1聽 聽聽聽聽聽聽聽聽聽聽
聽聽聽
聽聽聽 system("PAUSE");聽
聽聽聽 return 0;
}
錛僫 nclude <iostream>
錛僫 nclude <stdlib.h>
錛僫 nclude <string>
錛僫 nclude <sstream>
using namespace std;
{
聽聽聽 std::stringstream stream;
聽聽聽 char ip[16];
聽聽聽 stream << 218; //insert int
聽聽聽 stream << "."; //insert string
聽聽聽 stream << 192; //insert int
聽聽聽 stream << "."; //insert string
聽聽聽 stream << 160; //insert int
聽聽聽 stream << "."; //insert string
聽聽聽 stream << 228; //insert int
聽聽聽
聽聽聽 stream >> ip;
聽聽聽 system("PAUSE");聽
聽聽聽 return 0;
]]>