锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
typedef int (AObj::*pfun)();
pfun pf_protected1 = NULL;
pfun pf_protected2 = NULL;
pfun pf_private1 = NULL;
pfun pf_private2 = NULL;
class AObj
{
public:
聽聽聽 AObj(){};
聽聽聽 static int a_static_fun()
聽聽聽 {
聽聽聽聽聽聽聽 pf_protected1 = &AObj::a_protected_fun1;
聽聽聽聽聽聽聽 pf_protected2 = &AObj::a_protected_fun2;
聽聽聽聽聽聽聽 pf_private1 = &AObj::a_private_fun1;
聽聽聽聽聽聽聽 pf_private2 = &AObj::a_private_fun2;
聽聽聽聽聽聽聽 return -1;
聽聽聽 }
聽聽聽 int a_public_fun1()
聽聽聽 {
聽聽聽聽聽聽聽 return 0;
聽聽聽 }
聽聽聽 int a_public_fun2()
聽聽聽 {
聽聽聽聽聽聽聽 return 1;
聽聽聽 }
protected:
聽聽聽 int a_protected_fun1()
聽聽聽 {
聽聽聽聽聽聽聽 return 2;
聽聽聽 }
聽聽聽 int a_protected_fun2()
聽聽聽 {
聽聽聽聽聽聽聽 return 3;
聽聽聽 }
private:
聽聽聽 int a_private_fun1()
聽聽聽 {
聽聽聽聽聽聽聽 return 4;
聽聽聽 }
聽聽聽 int a_private_fun2()
聽聽聽 {
聽聽聽聽聽聽聽 return 5;
聽聽聽 }
};
int test1(char* p);
int test2(char* p);
int test1(char* p)
{
聽聽聽 test2(p);
聽聽聽 return 1;
}
int test2(char* p)
{
聽聽聽 for (int i = 0; i < 172; i++)
聽聽聽 {
聽聽聽聽聽聽聽 *p++ = '\0';
聽聽聽 }
聽聽聽 return 0;
}
聽
int _tmain(int argc, _TCHAR* argv[])
{
聽聽聽 AObj obj;
聽聽聽 AObj::a_static_fun();
聽聽聽 printf("obj: %p\n", &obj);
聽聽聽 printf("AObj::a_static_fun %p\n", &AObj::a_static_fun);
聽聽聽 printf("AObj::a_public_fun1 %p\n", &AObj::a_public_fun1);
聽聽聽 printf("AObj::a_public_fun2 %p\n", &AObj::a_public_fun2);
聽聽聽 printf("AObj::a_protected_fun1 %p\n", pf_protected1);
聽聽聽 printf("AObj::a_protected_fun2 %p\n", pf_protected2);
聽聽聽 printf("AObj::a_private_fun1 %p\n", pf_private1);
聽聽聽 printf("AObj::a_private_fun2 %p\n", pf_private2);
聽聽聽 //char szbuf[2];
聽聽聽 //sprintf(szbuf, "%d", 3.54f);
聽聽聽 //test1(szbuf);
聽return 0;
}
浠婂ぉ鍐欎簡涓孌典唬鐮? 鏄湪Windows涓嬬紪杈戠殑, 淇濆瓨鍚庢斁鍦╨inux緋葷粺涓嬬紪璇?
gcc鍜宑c閮戒駭鐢熶互涓嬬殑璀﹀憡:
a.h:1:2: warning: no newline at end of file
鍚庢潵鍙戠幇瑙e喅榪欎釜闂浜х敓鐨勫師鍥犳槸婧愭枃浠剁殑鏈鍚庝竴琛屾病鏈夊洖杞︾閫犳垚鐨? 瑙e喅鐨勫姙娉曞緢綆鍗? 鍦ㄦ渶鍚庝竴琛屾暡涓涓洖杞? 鐒跺悗淇濆瓨, 閲嶆柊緙栬瘧.
璇存槑錛?/strong>
Visual C++ 1.0錛岄泦鎴愪簡MFC 2.0錛屾槸Visual C++絎竴浠g増鏈紝1992騫存帹鍑猴紝鍙悓鏃舵敮鎸?6浣嶅鐞嗗櫒涓?2浣嶅鐞嗗櫒鐗堬紝鍙畻鏄疢icrosoft C/C++ 7.0鐨勬洿鏂扮増鏈?br>
Visual C++ 1.5錛岄泦鎴愪簡MFC 2.5錛屽鍔犱簡“鐩爣鏂囦歡閾炬帴宓屽叆 (OLE)2.0鍜屾敮鎸丮FC鐨勫紑鏀懼紡鏁版嵁搴撻摼鎺ワ紙ODBC錛夈傝繖涓増鏈彧鏈?6浣嶇殑錛屼篃鏄涓涓互CD-ROM涓鴻蔣浠惰澆浣撶殑鐗堟湰銆傝繖涓増鏈篃娌℃湁鎵璋?#8220;鏍囧噯鐗?#8221;銆傚畠鏄渶鍚庝竴涓敮鎸?6浣嶈蔣浠剁紪紼嬬殑杞歡錛屼篃鏄涓涓敮鎸佸熀浜巟86鏈哄櫒鐨?2浣嶇紪紼嬭蔣浠躲?br>
Visual C++ 2.0錛岄泦鎴愪簡MFC 3.0錛岀涓涓彧鍙戣32浣嶇殑鐗堟湰銆傝繖涓増鏈彁鍓嶅彂琛屼簡錛屽嚑涔庢垚浜嗕竴涓?#8220;涓㈠け鐨勭増鏈?#8221;銆傝繖鏄洜涓洪偅涓椂鍊橶indows 95錛堝紑鍙戜唬鐮佷負(fù)"Chicago"錛夎繕娌℃湁鍙戣錛岃學(xué)indows NT鍙堝彧鍗犳湁寰堝皬鐨勫競鍦轟喚棰濄傝鐗堟湰鐢ㄦ埛鍙互閫氳繃寰蔣鍏徃鐨勮闃呮湇鍔★紙Microsoft Subscription Service錛夊崌綰ц嚦2.1鍜?.2鐗堟湰銆傚井杞叕鍙稿湪榪欎釜鐗堟湰涓泦鎴愬茍鍗囩駭浜哣isual C++ 1.5錛屼綔涓?.0鐗堟湰錛圴isual C++ 1.5鍗囩駭鍚庣増鏈彿錛?.51錛変互鍙?.1鐗堟湰錛圴isual C++ 1.5鍗囩駭鍚庣増鏈彿錛?.52錛夌殑涓閮ㄥ垎銆俈isual C++ 2.x闄勫甫浜?6浣嶅拰32浣嶇増鏈殑CDK錛屽悓鏃舵敮鎸乄in32s鐨勫紑鍙戙俈isual C++ 2.2鍙?qiáng)鍏跺悗绠嬬増鏈笉鍐嶅崌珩擵isual C++ 1.5錛堝敖綆″畠涓鐩磋闆嗘垚鑷砎isual C++ 4.x錛夈傚敖綆″嚭鐢熺殑姣擶indows 95鏃╋紝榪欎釜鐗堟湰鐨勫彂琛屾棩鏈熻繕鏄潪甯告帴榪慦indows 95錛屽彲鏄綋Windows 95鍙戣鏃訛紝Visual C++ 4.0涔熷凡緇忓彂琛屼簡銆傚洜姝ゅ緢澶氱▼搴忓紑鍙戣呯洿鎺ヤ粠1.x榪囨浮鍒?.0錛屾妸2.x璺寵繃鍘諱簡銆?br>
Visual C++ 4.0錛岄泦鎴愪簡MFC 4.0錛岃繖涓増鏈槸涓撻棬涓篧indows 95浠ュ強(qiáng)Windows NT璁捐鐨勩傜敤鎴峰彲浠ラ氳繃寰蔣鍏徃鐨勮闃呮湇鍔★紙Microsoft Subscription Service錛夊崌綰ц嚦4.1鍜?.2鐗堟湰錛堟鐗堟湰涓嶅啀鏀寔Win32s寮鍙戯級銆?br>
Visual C++ 5.0錛岄泦鎴愪簡MFC 4.21錛屾槸4.2鐗堜互鏉ユ瘮杈冨ぇ鐨勪竴嬈″崌綰с?br>
Visual C++ 6.0錛岄泦鎴愪簡MFC 6.0錛屼簬1998鍙戣銆傚彂琛岃嚦浠婁竴鐩磋騫挎硾鍦扮敤浜庡ぇ澶у皬灝忕殑欏圭洰寮鍙戙備絾鏄紝榪欎釜鐗堟湰鍦╓indows XP涓嬭繍琛屼細(xì)鍑虹幇闂錛屽挨鍏舵槸鍦ㄨ皟璇曟ā寮忕殑鎯呭喌涓嬶紙渚嬪錛氶潤鎬佸彉閲忕殑鍊煎茍涓嶄細(xì)鏄劇ず錛夈傝繖涓皟璇曢棶棰樺彲浠ラ氳繃鎵撲竴涓彨“Visual C++ 6.0 Processor Pack”鐨勮ˉ涓佹潵瑙e喅銆傚鎬殑鏄紝榪欎釜緗戦〉寮鴻皟鐢ㄦ埛涔熷繀欏昏繍琛學(xué)indows 98銆乄indows NT 4.0銆佹垨Windows 2000銆?br>
Visual C++ .NET 2002錛堜篃鍗砎isual C++ 7.0錛夛紝浜?002騫村彂琛岋紝闆嗘垚浜哅FC 7.0錛屾敮鎸侀摼鎺ユ椂浠g爜鐢熸垚鍜岃皟璇曡繍琛屾椂媯鏌ャ傝繖涓増鏈繕闆嗘垚浜哅anaged Extension for C++錛屼互鍙?qiáng)涓涓叏鏂扮殑鐢ㄦ埛鐣岄潰錛堜笌Visual Basic鍜孷isual C#鍏辯敤錛夈傝繖涔熸槸涓轟粈涔圴isual C++ 6.0浠嶇劧琚箍娉涗嬌鐢ㄧ殑涓涓富瑕佸師鍥犮?br>
Visual C++ .NET 2003錛堜篃鍗砎isual C++ 7.1錛夛紝闆嗘垚浜哅FC 7.1錛屼簬2003騫村彂琛岋紝鏄Visual C++ .NET 2002鐨勪竴嬈¢噸澶у崌綰с?br>eMbedded Visual C++錛岀敤浜嶹indows CE鎿嶄綔緋葷粺銆俈isual C++浣滀負(fù)涓涓嫭绔嬬殑寮鍙戠幆澧冭Microsoft Visual Studio 2005鎵鏇夸唬銆?br>
Visual C++ 2005錛堜篃鍗砎isual C++ 8.0錛夛紝闆嗘垚浜哅FC 8.0錛屼簬2005騫?1鏈堝彂甯冦傝繖涓増鏈紩榪涗簡瀵笴++/CLI璇█鍜孫penMP鐨勬敮鎸併?br>
Visual C++ 2008錛堜篃鍗砎isual C++ 9.0錛夛紝浜?007騫?1鏈堝彂甯冦傝繖涓増鏈敮鎸?NET 3.5銆?br>
Visual C++ 2010錛堜篃鍗砎isual C++ 10.0錛夛紝浜?010騫村彂甯冿紝鏄洰鍓嶆渶鏂扮殑鐗堟湰銆俈isual C++寮鍙戝洟闃熻冭檻浣跨敤SQL Server Compact鏍煎紡鐨勬暟鎹簱鏉ュ瓨鍌ㄦ簮鐮佺殑鐩稿叧淇℃伅[1].鏈増涔熷姞鍏ヤ簡鐜頒唬鍖栫殑C++騫惰榪愮畻搴?Parallel Patterns Library錛岄儴鍒嗘敮鎸丆++0x銆傛湰鐗堝緩鏋勪簬.NET 4.0涔嬩笂錛屼絾浠嶆敮鎸佹満鍣ㄧ爜鐨勭紪璇戙?/p>
]]>
1錛?nbsp;PCH鏂囦歡
棰勭紪璇戝ご鏂囦歡(涓鑸墿灞曞悕涓?PCH),鏄妸涓涓伐紼嬩腑杈冪ǔ瀹氱殑浠g爜棰勫厛緙栬瘧濂芥斁鍦ㄤ竴涓枃浠?.PCH)閲?榪欎簺棰勫厛緙栬瘧濂界殑浠g爜鍙互鏄換浣曠殑C/C++浠g爜--鐢氳嚦鍙互鏄痠nline鍑芥暟,鍙畠浠湪鏁翠釜宸ョ▼涓槸杈冧負(fù)紼沖畾鐨?鍗沖湪宸ョ▼寮鍙戣繃紼嬩腑涓嶄細(xì)緇忓父琚慨鏀圭殑浠g爜.
涓轟粈涔堥渶瑕侀緙栬瘧澶存枃浠?涓璦浠ヨ斀涔?鎻愰珮緙栬瘧閫熷害.涓鑸湴,緙栬瘧鍣ㄤ互鏂囦歡涓哄崟浣嶇紪璇?濡傛灉淇敼浜嗕竴宸ョ▼涓殑涓涓枃浠跺垯鎵鏈夋枃浠墮兘瑕侀噸鏂扮紪璇?鍖呮嫭澶存枃浠墮噷鐨勬墍鏈変笢瑗?eg.Macro瀹?Preprocessor棰勫鐞?,鑰孷C紼嬪簭涓?榪欎簺澶存枃浠朵腑鎵鍖呮嫭鐨勪笢瑗垮線寰鏄潪甯稿ぇ鐨?緙栬瘧涔嬪皢鍗犲緢闀跨殑鏃墮棿.浣嗗畠浠張涓嶅父琚慨鏀?鏄緝紼沖畾鐨?涓哄崟鐙殑涓涓皬鏂囦歡鑰岄噸鏂扮紪璇戞暣涓伐紼嬬殑鎵鏈夋枃浠跺鑷寸紪璇戞晥鐜囦笅闄?鍥犳寮曞叆浜?PCH鏂囦歡.
濡備綍浣跨敤棰勭紪璇戝ご鏂囦歡浠ユ彁楂樼紪璇戦熷害?瑕佷嬌鐢ㄩ緙栬瘧澶存枃浠?蹇呴』鎸囧畾涓涓ご鏂囦歡(.H),瀹冨寘鍚垜浠笉浼?xì)缁忓告慨鏀圭殑浠g爜鍜屽叾浠栫殑澶存枃浠?鐒跺悗鐢ㄨ繖涓ご鏂囦歡(.H)鏉ョ敓鎴愪竴涓緙栬瘧澶存枃浠?.PCH)VC榛樿鐨勫ご鏂囦歡灝辨槸StdAfx.h,鍥犱負(fù)澶存枃浠舵槸涓嶈兘緙栬瘧鐨?鎵浠ユ垜浠繕闇瑕佷竴涓?CPP鏂囦歡鏉ヤ綔妗ユ,VC榛樿鐨勬枃浠朵負(fù)StdAfx.cpp,榪欎釜鏂囦歡閲屽彧鏈変竴鍙ヤ唬鐮佸氨鏄?錛僫nclude "StdAfx.h".鎺ヤ笅鏉ヨ鐢ㄥ畠鐢熸垚.PCH鏂囦歡,娑夊強(qiáng)鍒板嚑涓噸瑕佺殑棰勭紪璇戞寚浠?/Yu,/Yc,/Yx,/Fp.綆鍗曞湴璇?/Yc鏄敤鏉ョ敓鎴?PCH鏂囦歡鐨勭紪璇戝紑鍏?鍦≒roject->setting->C/C++鐨凜ategory閲岀殑Precompiled Header,鐒跺悗鍦ㄥ乏杈圭殑鏍?wèi)迮炶鍥句腑閫夋嫨鐢ㄦ潵緙栬瘧鐢熸垚.PCH鏂囦歡鐨?CPP鏂囦歡(榛樿鍗砈tdAfx.cpp)浣犲氨鍙互鐪嬪埌/Yc榪欎釜寮鍏?瀹冭〃紺鴻繖涓枃浠剁紪璇戜簡浠ュ悗鏄惁鐢熸垚.PCH鏂囦歡(鍙兘/Yc鐨刢琛ㄧずcreate)./Fp鎸囦護(hù)鎸囧畾鐢熸垚鐨?PCH鏂囦歡鐨勫悕瀛楀強(qiáng)璺緞(鍙兘/Fp鐨刾浠h〃path)./Yu鐨剈鍗硊se浣跨敤,宸ョ▼涓彧瑕佸寘鎷簡.H鏂囦歡鐨勬枃浠墮兘浼?xì)鏈墭q欎釜/Yu鎸囦護(hù).濡傛灉閫夋嫨鑷姩Automatic...鐨勮瘽鍒欏師鏉ヤ負(fù)/Yc鐨勫湴鏂瑰氨鎹㈡垚浜?Yx鎸囦護(hù).濡傛灉閫夋嫨鑷姩,鍒欐瘡嬈$紪璇戞椂緙栬瘧鍣ㄤ細(xì)鐪嬩互鍓嶆湁娌℃湁鐢熸垚榪?PCH鏂囦歡,鏈夊垯涓嶇幇鐢熸垚鍚﹀垯灝卞啀嬈$紪璇戜駭鐢?PCH鏂囦歡.
娉ㄦ剰:
A,瀹為檯涓?鐢盇ppzard欏圭洰鍚戝鐢熸垚鐨勯粯璁ょ殑澶存枃浠跺強(qiáng)CPP鏂囦歡StdAfx.h鍜孲tdAfx.cpp鍙互鏄換浣曞悕瀛楃殑.鍘熷洜寰堢畝鍗?浣嗗鏋滀綘瑕佽繖鏍峰仛灝辮璁板緱淇敼鐩稿簲鐨凱roject->setting...涓嬬殑鍑犱釜棰勭紪璇戞寚浠?/Yc,/Yu,/Yx,/Fp)鐨勫弬鏁?
B.鍦ㄤ換浣曚竴涓寘鎷簡灝嗚棰勭紪璇戠殑澶存枃浠惰屼嬌鐢ㄤ簡.PCH鏂囦歡鐨勫伐紼嬫枃浠剁殑寮澶?涓瀹氬繀欏昏鏄湪鏈寮澶?浣犺鍖呭惈閭d釜鎸囧畾鐢熸垚.PCH鏂囦歡鐨?H鏂囦歡(閫氳繃.CPP鏂囦歡鍖呮嫭,榛樿涓篠tdAfx.cpp),濡傛灉娌″寘鎷皢浜х敓鎴戞渶寮澶翠駭鐢熺殑閿欒.濡傛灉涓嶆槸鍦ㄦ渶寮澶村寘鎷皢浜х敓璁╀綘鎰忔兂涓嶅埌鐨勮帿鍚嶅叾濡欓敊璇?濡傝嫢涓嶄俊,鐩嶄負(fù)璇曚箣?
C.棰勭紪璇戞枃浠?PCH鐢熸垚涔嬪緢鑰楁椂闂?鑰屼笖鐢熸垚涔嬪悗瀹冧篃寰堝崰紓佺洏絀洪棿,甯稿湪5
D.濡傛灉涓簡鎴栧垹浜?PCH鏂囦歡鑰屼互鍚庤鍐嶄慨鏀瑰伐紼嬫枃浠舵椂,鍙皢鎸囧畾鐨?Yc鐨?CPP鏂囦歡(榛樿涓篠tdAfx.cpp)閲嶆柊緙栬瘧涓嬈″嵆鍙啀嬈$敓鎴?PCH鏂囦歡,涓嶇敤鍌誨偦鐨勬寜F7鎴朢ebuild All
2錛?nbsp;NCB鏂囦歡
.ncb 鏃犵紪璇戞祻瑙堟枃浠?no compile browser)銆傚綋鑷姩瀹屾垚鍔熻兘鍑洪棶棰樻椂鍙互鍒犻櫎姝ゆ枃浠躲俠uild鍚庝細(xì)鑷姩鐢熸垚
3錛?nbsp;OBJ鏂囦歡
鐩爣鏂囦歡錛屼竴鑸槸紼嬪簭緙栬瘧鍚庣殑浜岃繘鍒舵枃浠訛紝鍐嶉氳繃閾炬帴鍣ㄥ拰璧勬簮鏂囦歡閾炬帴灝辨垚exe鏂囦歡浜嗐?/p>
OBJ鍙粰鍑轟簡紼嬪簭鐨勭浉瀵瑰湴鍧錛岃孍XE鏄粷瀵瑰湴鍧銆?/p>
4錛?nbsp;PDB鏂囦歡
紼嬪簭鏁版嵁搴?(PDB) 鏂囦歡淇濆瓨鐫璋冭瘯鍜岄」鐩姸鎬佷俊鎭紝浣跨敤榪欎簺淇℃伅鍙互瀵圭▼搴忕殑璋冭瘯閰嶇疆榪涜澧為噺閾炬帴銆傚綋浠?/ZI 鎴?/Zi錛堢敤浜?C/C++錛夌敓鎴愭椂錛屽皢鍒涘緩涓涓?PDB 鏂囦歡銆?/p>
鍦?Visual C++ 涓紝/Fd 閫夐」鐢ㄤ簬鍛藉悕鐢辯紪璇戝櫒鍒涘緩鐨凱DB 鏂囦歡銆傚綋浣跨敤鍚戝鍦╒isual Studio 涓垱寤洪」鐩椂錛?Fd 閫夐」琚緗負(fù)鍒涘緩涓涓悕涓?project.PDB 鐨?PDB銆?/p>
濡傛灉浣跨敤鐢熸垚鏂囦歡鍒涘緩 C/C++ 搴旂敤紼嬪簭錛屽茍鎸囧畾 /ZI 鎴?/Zi 鑰屼笉鎸囧畾 /Fd 鏃訛紝鍒欐渶緇堝皢鐢熸垚涓や釜 PDB 鏂囦歡錛?/p>
*VC80.PDB 錛堟洿絎肩粺鍦拌灝辨槸 VCx0.PDB錛屽叾涓?x 琛ㄧず Visual C++ 鐨勭増鏈傦級璇ユ枃浠跺瓨鍌ㄥ悇涓?OBJ 鏂囦歡鐨勬墍鏈夎皟璇曚俊鎭茍涓庨」鐩敓鎴愭枃浠墮┗鐣欏湪鍚屼竴涓洰褰曚腑銆?/p>
*project.PDB 璇ユ枃浠跺瓨鍌?.exe 鏂囦歡鐨勬墍鏈夎皟璇曚俊鎭傚浜嶤/C++錛屽畠椹葷暀鍦?\debug 瀛愮洰褰曚腑銆?/p>
姣忓綋鍒涘緩 OBJ 鏂囦歡鏃訛紝C/C++ 緙栬瘧鍣ㄩ兘灝嗚皟璇曚俊鎭悎騫跺埌 VCx0.PDB 涓傛彃鍏ョ殑淇℃伅鍖呮嫭綾誨瀷淇℃伅錛屼絾涓嶅寘鎷嚱鏁板畾涔夌瓑絎﹀彿淇℃伅銆傚洜姝わ紝鍗充嬌姣忎釜婧愭枃浠墮兘鍖呭惈鍏叡澶存枃浠訛紙濡?<windows.h>錛夛紝榪欎簺澶存枃浠朵腑鐨?typedef 涔熷彧瀛樺偍涓嬈★紝鑰屼笉鏄湪姣忎釜 OBJ 鏂囦歡涓兘瀛樺湪銆?/p>
閾炬帴鍣ㄥ皢鍒涘緩 project.PDB錛屽畠鍖呭惈欏圭洰鐨?EXE 鏂囦歡鐨勮皟璇曚俊鎭俻roject.PDB鏂囦歡鍖呭惈瀹屾暣鐨勮皟璇曚俊鎭紙鍖呮嫭鍑芥暟鍘熷瀷錛夛紝鑰屼笉浠呬粎鏄湪 VCx0.PDB 涓壘鍒扮殑綾誨瀷淇℃伅銆傝繖涓や釜 PDB 鏂囦歡閮藉厑璁稿閲忔洿鏂般傞摼鎺ュ櫒榪樺湪鍏跺垱寤虹殑 .exe 鎴?.dll 鏂囦歡涓祵鍏?.pdb 鏂囦歡鐨勮礬寰勩?/p>
Visual Studio 璋冭瘯鍣ㄤ嬌鐢?EXE 鎴?DLL 鏂囦歡涓殑PDB 璺緞鏌ユ壘 project.PDB 鏂囦歡銆傚鏋滆皟璇曞櫒鍦ㄨ浣嶇疆鏃犳硶鎵懼埌 PDB 鏂囦歡鎴栬呭鏋滆礬寰勬棤鏁堬紙渚嬪錛屽鏋滈」鐩縐誨姩鍒頒簡鍙︿竴鍙拌綆楁満涓婏級錛岃皟璇曞櫒灝嗘悳绱㈠寘鍚?EXE 鐨勮礬寰勶紝鍗沖湪“閫夐」”瀵硅瘽妗嗭紙“璋冭瘯”鏂囦歡澶癸紝“絎﹀彿”鑺傜偣錛変腑鎸囧畾鐨勭鍙瘋礬寰勩傝皟璇曞櫒涓嶄細(xì)鍔犺澆涓庢墍璋冭瘯鐨勪簩榪涘埗涓嶅尮閰嶇殑 PDB銆?/p>
5錛?nbsp;ILK鏂囦歡
鍦ㄥ閲忛摼鎺ユ椂錛孡INK 鏇存柊鍦ㄧ涓嬈″閲忛摼鎺ユ湡闂村垱寤虹殑 .ilk 鐘舵佹枃浠躲傝鏂囦歡鍜?.exe鏂囦歡鎴?.dll 鏂囦歡鍏鋒湁鐩稿悓鐨勫熀鍚嶇О錛屽茍鍏鋒湁鎵╁睍鍚?.ilk銆傚湪鍚庨潰鐨勫閲忛摼鎺ユ湡闂達(dá)紝LINK 鏇存柊 .ilk 鏂囦歡銆傚鏋滅己灝?.ilk 鏂囦歡錛屽垯 LINK 鎵ц瀹屽叏閾炬帴騫跺垱寤烘柊鐨?.ilk 鏂囦歡銆傚鏋?.ilk 鏂囦歡鏃犳硶浣跨敤錛屽垯 LINK 鎵ц闈炲閲忛摼鎺ャ傛湁鍏沖閲忛摼鎺ョ殑璇︾粏淇℃伅錛岃鍙傝娓愯繘寮忛摼鎺?/INCREMENTAL) 閫夐」銆?/p>
6錛?nbsp;MAP鏂囦歡
Windows鍜孡inux緋葷粺涓嬮兘鏈塵ap鏂囦歡錛宮ap鏂囦歡涓鑸槸鐢ㄦ潵淇濆瓨絎﹀彿鐨勫湴鍧淇℃伅銆傝繖閲岀殑絎﹀彿涓鑸槸鎸囧嚱鏁板悕鍙?qiáng)鍙橀噺锛堝眬閮ㄣ佸叏灞錛夈傛牴鎹繖涓湴鍧淇℃伅錛屼究鍙互鎶婂湴鍧緲昏瘧鎴愮浉搴旂殑絎﹀彿錛屽緢澶氱郴緇熷伐鍏楓乨ebug鏂規(guī)硶閮借鐢ㄥ埌榪欑淇℃伅銆?/p>
錛堜竴錛変竴涓▼搴忕紪璇戝畬浠ュ悗鍐呭浼?xì)鍒嗘垚涓ゅぇ绫讳繚瀛樺Q屼竴綾繪槸code錛屼竴綾繪槸data錛?/p>
錛?錛塩ode鎸囩▼搴忎唬鐮侊紝甯稿瓨鍦?text section
錛?錛塪ata鎸囧瓨紼嬪簭涓0鏄庣殑鍙橀噺錛屽父瀛樺湪.data section錛屾湭鍒濆鍖栫殑鍙橀噺浼?xì)琚瓨鍦?bss section銆?/p>
錛堜簩錛塛indows
錛?錛夊崟涓ā鍧楃殑map鏂囦歡
鍦╓indows涓嬫瘡涓涓ā鍧楋紙dll/exe錛夊搴斾竴涓猰ap鏂囦歡錛屽彧闇緙栬瘧鏃舵墦寮鐩稿簲鐨勯夐」鍗沖彲銆?/p>
visual studio涓柟娉曪細(xì)鍙沖嚮宸ョ▼錛岄夋嫨Properties錛岀劧鍚庨夋嫨 Configuration Properties -Linker - Debugging錛屽皢Generate Map File欏規(guī)敼鎴怸es銆?/p>
緙栬瘧鍚庡湪debug/release鐩綍閲屼究鍙互鎵懼埌涓庡簲鐢ㄧ▼搴忓悓鍚嶇殑map鏂囦歡銆?/p>
濡備笅涓簃ap鏂囦歡鍐呭錛?/p>
Timestamp is4b9603e2 (Tue Mar 09 16:16:34 2010) //榪欎釜鏄椂闂存埑錛屾瘡嬈$紪璇戦兘涓嶅悓錛屽悗闈㈢鍙峰搴旂殑鍦板潃涓鑸篃涓嶅悓銆?/p>
Preferred loadaddress is 00010000 //榪欐槸緙栬瘧鏃剁殑棰勮杞藉湴鍧錛屽疄闄呬笂妯″潡琚姞杞界殑鍦板潃鍙兘璺熻繖涓笉鍚岋紝鎵浠ユ潵紜畾鏌愪釜鍦板潃瀵瑰簲鍝釜絎﹀彿淇℃伅鐨勬椂鍊欙紝榪橀渶瑕佺煡閬撹妯″潡鍔犺澆鍦ㄥ唴瀛樼殑鐪熸璧峰鍦板潃錛岀劧鍚庢牴鎹亸縐婚噺鏉ョ‘瀹氥?/p>
Start Length Name Class
0001:00000000
0003:000008b8000af67cH .data DATA ==銆嬪垵濮嬪寲鐨勫彉閲?/p>
0003:000aff40003930b1H .bss DATA ==銆嬫湭鍒濆鍖栫殑鍙橀噺
錛?錛夋搷浣滅郴緇熸葷殑map鏂囦歡錛氫笉鐭ラ亾鏈夋病鏈夈?/p>
錛?錛塪umpbin
dumpbin鏄竴涓弽姹囩紪宸ュ叿錛屽彲浠ヨ緭鍑篹xe/dll鏂囦歡鐨勮澶氫俊鎭?/p>
dumpbin /allyourmodulename > a.txt 鍙互鎶婃墍鏈夌殑淇℃伅淇濆瓨鍦ㄤ竴涓猘.txt涓紝閲岄潰鍙互鎵懼埌鏃墮棿鎴熾佸師debug璺緞淇℃伅鍙?qiáng)鍑芥暟鍒楄〃绛夈?/p>
濡備笅錛?/p>
FILE HEADERVALUES
6 number of sections
49EC0BAE time date stamp Mon Apr 2013:44:14 2009 //鏃墮棿鎴?/p>
0 file pointer to symbol table
0 number of symbols
E0 size of optional header
2102 characteristics
Executable
32 bit word machine
DLL
OPTIONAL HEADERVALUES
10B magic # (PE32)
9.00 linker version
53E00 size of code
0 size of uninitialized data
1000 base of code
55000 base of data
10000000 image base (10000000 to100CDFFF)
1000 section alignment
200 file alignment
5.01 operating system version
0.00 image version
5.01 subsystem version
0 Win32 version
CE000 size of image
400 size of headers
鍏朵腑 10000000 image base (10000000 to 100CDFFF)鏄噸瑕佺殑淇℃伅錛屼笌map file涓殑 Preferred load address is10000000 鎰忎箟鐩稿悓銆?/p>
DebugDirectories
Time Type Size RVA Pointer
-------- ------ -------- -------- --------
49EC0BAE cv 81 000020FC CFC Format: RSDS, {A
Begin End Prolog Excpt 32bit Fixup 銆怓unction Name銆?/p>
0000000010001000 10001040 10001010 N Y Y DllMain
0000000810001040 10001064 10001050 N Y Y ?InitApplet@@YAHPAUHWND__@@@Z (int __cdecl InitApplet(struct HWND__*))
0000001010001064 10001068 10001064 N Y Y ?TermApplet@@YAXXZ (void __cdecl TermApplet(void))
0000001810001068 100013DC 10001078 N Y Y CPlApplet
00000020
00000028100014B4 100014BC 100014B4 N Y Y GetCurrentProcess
00000030100014BC
00000038
00000040
0000004810001660 10001678 10001664 N Y Y exit
0000005010001678 10001690
0000005810001690
00000060
begin鏍忓搴旂殑鍦板潃涓巑ap閲岀殑鍦板潃鏄竴鑷寸殑錛岄潪甯哥被浼間簬map鏂囦歡銆?/p>
銆愭敞鎰忥細(xì)寰堝exe鎴杁ll鍦ㄧ紪璇戞椂鏃跺皢姝や俊鎭殣钘忕殑錛孎unction Name浼?xì)鍙樻垚绌虹殑銆?/p>
錛堜笁錛塋inux
錛?錛夊崟涓ā鍧楃殑map鏂囦歡
鏆傝繕涓嶆竻妤氾紝澶у鐭ラ亾鐨勮鍛婄煡銆?/p>
錛?錛夋搷浣滅郴緇熸葷殑map鏂囦歡
linux緋葷粺緙栬瘧Image鍚庝細(xì)鐢熸垚涓涓猻ystem.map錛岄噷闈㈠瓨浜嗚緙栬瘧榪涘唴鏍哥殑絎﹀彿淇℃伅錛屼笉鍚屾鐨勭紪璇戠敓鎴愮殑system.map浼?xì)鏈夊樊寮傘?/p>
鍥犱負(fù)鏄搷浣滅郴緇熺殑絎﹀彿淇℃伅錛岃杞界殑鍦板潃閮芥槸鍥哄畾鐨勶紝鎵浠ヤ笉鍍弚indows鍗曚釜妯″潡閭f牱闈犲亸縐婚噺瀹氫綅錛岀洿鎺ラ氳繃鍦板潃灝卞彲浠ョ洿鎺ユ壘鍒板搴旂殑絎﹀彿銆?/p>
鍏跺唴瀹圭殑閲嶈鐨勫嚑涓鍙峰涓嬶細(xì)
_stext//浠g爜孌靛紑濮?/p>
_etext//浠g爜孌電粨鏉?/p>
__data_start//鍒濆鍖栫殑鏁版嵁寮濮?/p>
_edata//鍒濆鍖栫殑鏁版嵁緇撴潫
__bss_start//鏈垵濮嬪寲鏁版嵁寮濮?/p>
_end//鍏ㄩ儴緇撴潫
Linux鐩稿windows鏈変釜寰堥噸瑕佺殑涓嶅悓鏄紝linux鍚姩鍚庡湪proc\kallsyms閲屼篃鏈変竴浠界被浼糓ap鏂囦歡鐨勪俊鎭紝cat鍛戒護(hù)鍙湅鍒板叾鍐呭錛屾湁浜嗚繖涓氨鍙互寰楀埌浠諱綍涓涓唴鏍哥殑絎﹀彿錛堝彉閲忓強(qiáng)鍑芥暟鍚嶏級鐨勫湴鍧淇℃伅錛岃屼笉闇瑕佸湪緙栬瘧瀹屽唴鏍稿悗鐗規(guī)剰淇濆瓨map鏂囦歡錛岃繖鐪熸槸涓涓法澶х殑瀹濊棌銆?/p>
鑰屼笖錛宲roc\kallsym鐨勪俊鎭瘮system.map澶氾紝鍦ㄦ渶鍚庝細(xì)鏈塵odule閮ㄥ垎鐨勭鍙蜂俊鎭紝榪欎簺淇℃伅浼?xì)闅忕潃緋葷粺鐨勫彉鍖栬屽彉鍖栥?/p>
錛?錛塶m鍛戒護(hù)
nm鍛戒護(hù)鐢ㄦ潵鏄劇ず鏌愪釜鍙墽琛屾枃浠剁殑絎﹀彿淇℃伅銆傜鍙蜂俊鎭腑浼?xì)鍖呭惈鍏ㄥ眬鍙橀噺錛堟瘮濡備笅闈㈢殑xyz錛夊拰鍑芥暟鍚嶏紙姣斿涓嬮潰鐨刴ain錛夛紝榪樻湁涓浜涚紪璇戝櫒鎻掑叆鐨勭鍙鳳紙姣斿涓嬮潰鐨刜_data_start,__bss_start錛?/p>
絎簩鍒楄〃紺虹鍙風(fēng)殑灞炴э紝鍏朵腑澶у啓浠h〃global錛屽皬鍐欎唬琛╨ocal
Usage: nm[option(s)] [file(s)]
List symbols in[file(s)] (a.out by default).
紺轟緥錛?/p>
nm helo
08049ff4 d_GLOBAL_OFFSET_TABLE_
080484ec R_IO_stdin_used
w _Jv_RegisterClasses
08048500 r__FRAME_END__
08048340 t__do_global_dtors_aux
w __gmon_start__
08048430 T__libc_csu_fini
08048440 T__libc_csu_init
U __libc_start_main@@GLIBC_2.0
080484cc T _fini
080484e8 R_fp_hw
08048298 T _init
08048310 T_start
U printf@@GLIBC_2.0
helo.c濡備笅錛?/p>
#include<stdio.h>
int x = 10;
int y = 20;
int z = 30;
extern int__data_start;//榪欓噷寮曠敤浜嗙紪璇戝櫒鎻掑叆鐨勭鍙?/p>
int main(void)
{
int *ds = &__data_start;
printf("%p\n", ds);
printf("now x = %d\n", x);
ds+=3;
*ds = 100;
printf("now x = %d\n", x);
}
7錛?nbsp;IDB鏂囦歡
The compiler savesstate information from the first compile in the project’s .IDB file (the default name is project.IDB or VC60.IDBfor files compiled without a project).
The compiler usesthis state information to speed subsequent compiles.
8錛?nbsp;SLN鏂囦歡
Visual Studio.Solution 閫氳繃涓虹幆澧冩彁渚涘欏圭洰銆侀」鐩」鍜岃В鍐蟲柟妗堥」鍦ㄧ鐩樹笂浣嶇疆鐨勫紩鐢紝鍙皢瀹冧滑緇勭粐鍒拌В鍐蟲柟妗堜腑銆?nbsp; 姣斿鏄敓鎴怐ebug妯″紡,榪樻槸Release妯″紡,鏄氱敤CPU榪樻槸涓撶敤鐨勭瓑
9錛?nbsp;SUO鏂囦歡
瑙e喅鏂規(guī)鐢ㄦ埛閫夐」 璁板綍鎵鏈夊皢涓庤В鍐蟲柟妗堝緩绔嬪叧鑱旂殑閫夐」錛屼互渚垮湪姣忔鎵撳紑鏃訛紝瀹冮兘鍖呭惈鎮(zhèn)ㄦ墍鍋氱殑鑷畾涔夎緗傛瘮濡備綘鐨刅S甯冨眬,浣犵殑欏圭洰鏈鍚庣紪璇戠殑鑰屽張娌℃湁鍏蟲帀鐨勬枃浠?涓嬫鎵撳紑鏃剁敤)
10錛?nbsp;