锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鍦ㄥ畼緗戜笅杞芥渶鏂扮増鐨刅SCode: https://code.visualstudio.com/ 鎵撳紑鎵╁睍闈㈡澘 VSCode->鏌ョ湅->鎵╁睍 鎵懼埌Go鎻掍歡 鍦ㄦ悳绱㈡閲岃緭鍏o, 鎵懼埌絎簩琛屽啓鏈?Rich Go language support for Visual Studio Code鐨勬彃浠? 鐐瑰嚮瀹夎 娉ㄦ剰涓嶆槸鎺掑悕鏈楂樼殑 閲嶅惎緙栬緫鍣?/p> 鎵撳紑璋冭瘯闈㈡澘 VSCode->鏌ョ湅->璋冭瘯 娣誨姞璋冭瘯鐩爣 鍦?娌℃湁璋冭瘯"鐨勪笅鎷夋涓偣鍑?娣誨姞閰嶇疆.." 娣誨姞鐩爣璋冭瘯閰嶇疆 渚嬪瓙: 鍏朵腑: "port", "host"閮芥槸go鎻掍歡鑷姩鐢熸垚鐨?/p>
"env"涓鴻緗幆澧冨彉閲? 璁劇疆涓轟綘鐨勫伐紼嬬洰褰曞氨鍙互(鍖呭惈bin, src鐨勬枃浠跺す) 姝ゆ椂鎵懼埌main.go鎸塅5, 浼氭姤閿欐彁紺? 鎴戜滑浣跨敤go鍛戒護琛岀紪璇戣皟璇曞櫒 灝哾lv璋冭瘯鍣ㄦ斁鍦℅OPATH(宸ョ▼鐩綍)鐨刡in鐩綍涓?/p>
璋冭瘯蹇嵎閿拰Visual Studio緋諱竴鑷?/p>
娉ㄦ剰鐐?/p>
鍑嗗VSCode
瀹夎Golang鎻掍歡
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "go",
"request": "launch",
"mode": "debug",
"remotePath": "",
"port": 2345,
"host": "127.0.0.1",
"program": "${fileDirname}",
"env": {
"GOPATH":"D:/Develop/vscodegolang"
},
"args": [],
"showLog": true
}
]
}鍑嗗璋冭瘯鎻掍歡
Failded to continue:"Cannot find Delve debugger. Install from https://github.com/derekparker/delve & ensure it is in your "GOPATH/bin" or "PATH"go get github.com/derekparker/delve/cmd/dlv閫変腑瑕佽皟璇曠殑main.go, 鐐瑰嚮F5, 鏃㈠彲浠ュ紑濮嬭皟璇?/p>
鍦╨aunch.json涓彲浠ユ坊鍔犲緇勮皟璇曞叆鍙? 閫氳繃璋冭瘯闈㈡澘涓変腑瀵瑰簲鐨勯厤緗紑鍚笉鍚岀洰鏍囩殑璋冭瘯
{
"version": "0.2.0",
"configurations": [
{
"name": "client",
"type": "go",
"request": "launch",
"mode": "debug",
"remotePath": "",
"port": 2345,
"host": "127.0.0.1",
"program": "${fileDirname}",
"env": {
"GOPATH":"D:/Develop/vscodegolang"
},
"args": [],
"showLog": true
},
{
"name": "server",
"type": "go",
"request": "launch",
"mode": "debug",
"remotePath": "",
"port": 2345,
"host": "127.0.0.1",
"program": "${workspaceRoot}/src/server",
"env": {
"GOPATH":"D:/Develop/vscodegolang"
},
"args": [],
"showLog": true
}
]
}
"program"涓殑"${fileDirname}"鏄互褰撳墠閫変腑鏂囦歡浣滀負鍚姩鐐?/p>
鏇村緩璁嬌鐢?program"鐨?${workspaceRoot}", 浠ュ寘鍚嶄綔涓哄惎鍔ㄧ偣鐨勬柟寮忚繘琛岄厤緗?/strong>
Google瀹樻柟涓篏olang鐨勮皟璇曚緥瀛愰粯璁や嬌鐢ㄤ簡gdb
鐒惰? 浣跨敤gdb璋冭瘯go紼嬪簭浼氶亣鍒癵oroutine鐨勫悇綾婚棶棰? 鍥犱負gdb涓嶆噦go
鍥犳, 榪欓噷浣跨敤delve榛戠鎶鏉ヨ繘琛孏olang鐨勭▼搴忚皟璇?/p>
綰懡浠よ璋冭瘯鏂規硶鍦ㄧ綉涓婂緢瀹規槗鎼滅儲鍒? 鏈枃涓昏浠iteIDE鏉ヨ繘琛岀▼搴忚皟璇?/p>
姝e父go build/install鍑虹殑go紼嬪簭鏄畬鍏ㄤ紭鍖栬繃鐨? 寮鴻浣跨敤璋冭瘯鍣ㄦ寕鎺ヨ皟璇曟椂, 鏌愪簺local鍙橀噺/lamda琛ㄨ揪寮忔崟鑾風殑鍙橀噺浼氱洿鎺ヨ繘鍏ュ瘎瀛樺櫒, 鏃犳硶浣跨敤璋冭瘯鍣ㄦ煡鐪?/p>
鍒犳帀鎵鏈夌殑pkg, 涓篵uild鎴杋nstall鍙傛暟鍔犲叆鍏抽棴緙栬瘧鍣ㄤ紭鍖栫殑鍙傛暟 -gcflags "-N -l"
渚嬪:
go install -gcflags "-N -l" svc\gamesvc
LiteIDE鑷甫浜唃db, 浣嗘槸娌℃湁delve璋冭瘯鍣? 闇瑕佽嚜琛屽畨瑁? 鍛戒護濡備笅
go get github.com/derekparker/delve/cmd/dlv
delve璋冭瘯鍣ㄤ細琚斁鍒頒綘鐨凣OPATH/bin涓?/p>
鍦↙iteIDE鑿滃崟涓夋嫨 璋冭瘯->debugger/delve
榪欎釜鏃跺? LiteIDE渚濈劧鎵句笉鍒癲elve, 鍥犱負瀹冧笉鍦ㄧ幆澧冨彉閲廝ATH涓? 榪欓噷鏃犻渶淇敼鐜鍙橀噺, 鍙渶瑕丩iteIDE鐨勭幆澧冮厤緗?/p>
鍦↙iteIDE鑿滃崟涓夋嫨 鏌ョ湅->緙栬緫褰撳墠鐜, 鍦ㄥ脊鍑虹殑鏂囨。涓慨鏀?/p>
PATH=c:\mingw32\bin;%GOROOT%\bin;%PATH%;c:\your\path\to\delve
鍘繪帀PATH鍓嶇殑娉ㄩ噴#, 鍦?PATH%娣誨姞鍒嗗彿, 鐒跺悗鍜屼綘鍒癲elve璋冭瘯鍣ㄧ殑璺緞
閫夋嫨浣犵殑宸ョ▼, 鐐瑰嚮F5, 榪涘叆璋冭瘯妯″紡

LiteIDE浣跨敤delve璋冭瘯鏃? 鏃犳硶鍦?鍙橀噺 鐩戣絳夌獥鍙d腑姝g‘鎹曟崏delve璋冭瘯榪斿洖鏁版嵁(鍥犱負鏍煎紡澶鏉備簡…)
娌″叧緋? 鎴戜滑浣跨敤鍛戒護琛岄厤鍚堟樉紺哄嵆鍙?/p>
LiteIDE鎺у埗鍙版垨璋冭瘯杈撳嚭紿楀彛鍦╠elve璋冭瘯鏃? 瀹為檯涓婃槸涓涓爣鍑嗗懡浠よ
鍛戒護濡備笅
p 鍙橀噺鍚嶅彲浠ユ煡鐪嬪彉閲忓?/p>
locals鏌ョ湅灞閮ㄥ彉閲?/p>
ls鍙煡鐪嬪綋鍓嶆枃浠?/p>
stack鏌ョ湅鏍?/p>
help鍙互鏌ョ湅鍚勭甯姪
濡傛灉浣犵殑紼嬪簭鏄閮ㄧ▼搴? 鎴栬呬嬌鐢╣o install瀹夎鍒癎OPATH/bin鐩綍鐨勭▼搴? 閭d箞浣跨敤delve璋冭瘯鍣ㄥ惎鍔ㄧ▼搴忔椂, 鍙兘浼氱鍒板惎鍔ㄨ礬寰勯敊璇殑闂
浣跨敤LiteIDE鑿滃崟 璋冭瘯->璋冭瘯鍏朵粬搴旂敤紼嬪簭… 濉叆浣犺璋冭瘯紼嬪簭鐨勮礬寰勪互鍙婂伐浣滅洰褰? 鍙互瑙e喅榪欎釜闂
榪欐槸鐜頒粖鍦扮悆涓婅皟璇昹ua5.1鏈鏂逛究鐨勫伐鍏? 娌℃湁涔嬩竴. 寮哄ぇ鐨勬敞鍏ュ紡璋冭瘯, 鎬ц兘鏋侀珮.鏀寔 鎸傛帴榪涚▼, 鍙橀噺灞曞紑, 鏂偣絳夊悇縐嶆棩甯告墍闇.
鏃╂湡鐨凞ecoda鏄敹璐瑰伐鍏? 鍥犳璐ㄩ噺闈炲父楂?
Decoda鐜板湪宸茬粡鍋滄寮鍙戝茍寮婧愪簡, 璋冭瘯lua5.2浼歝rash. 婧愪唬鐮佸彲浠ヤ綔涓轟竴縐嶆妧鏈弬鑰? 寰堝dll娉ㄥ叆淇敼鎶鏈? 鐏板父鐗沊
姣旇緝浼樼鐨勮皟璇曞伐鍏?鍥犱負鏀惰垂), 鍙互璋冭瘯lua5.1/5.2, 鐣岄潰灞炰簬vs2008綾誨瀷, 鍦熻豹鍙互鑰冭檻涔板嚑濂楄瘯璇?/p>

瀵筶ua5.1鏀寔杈冨ソ, 5.2涔熻兘璋冧絾鍋跺皵榪樻槸浼歝rash, 鍩轟簬榪滅▼璋冭瘯鏂瑰紡, 鎵浠ユц兘鐣ヤ綆.
娌℃湁IDE, 綰懡浠よ鏂瑰紡璋冭瘯鍣? 浣嗗洜涓虹畝鍗? 鎵浠ュ彲浠ュ弬鑰冨悗鍐欎竴涓嚜宸辯殑紼嬪簭鍐呭緩璋冭瘯鍣?/p>
鎶婅繖璐ф斁鍦ㄦ渶鍚庢槸鏈夊師鍥犵殑, 榪樿寰楅偅鍙ヨ佽瘽: 鑰佸涓寮婧? 鎴戜滑灝辨湁鑷富鐮斿彂浜? 瀵圭殑, 榪欒揣涓瀹氭槸鍙傝冧簡Decoda鐨勪唬鐮佸悗鎼炲嚭涓獀s鐨勬彃浠舵潵, 铏界劧涓嶆敹璐? 浣嗘槸涓嶆彁涓嬪弬鑰冨璞$殑琛屼負榪樻槸鍊煎緱鎵規枟鐨? 榪欒揣鍦ㄤ腑鏂囧崥瀹笂璇? 涓嶆敮鎸佹寕鎺ュ埌榪涚▼(Decoda鏀寔), 涓嶆敮鎸?4浣嶈皟璇?LuaStudio鏀寔), 璋冭瘯30~50嬈″伓灝旀寕1鍒?嬈? 鍝? 姣曠珶鍙槸浠g爜鎼繍宸? 涓嶇敓浜т唬鐮?
榪欒揣瑁呬笂, 鑳界敤, 璋?.2鏄笉琛岀殑, 5.1姣擠ecoda鏂逛究鐐? 姣曠珶vs鏀寔鎮誕鏄劇ず鍙橀噺.
璇翠簡閭d箞澶? 鍏跺疄瀵逛簬lua5.2鐗堟湰鐨勮皟璇? 榪樻槸娌℃湁鍏嶈垂鐨勬瘮杈冨悎閫傜殑鏂規, 濡傛灉瀹炲湪鎯寵皟璇? 榪樻槸鍙互鍙傝冧笅RemDebug鐨勫師鐞嗗強lua瀹樻柟璋冭瘯鏂囨。, 鑷繁閫氳繃c api璋冪敤鍐欎竴濂楅傚悎鑷繁鐨勮繙紼嬭皟璇曞伐鍏? 鍏跺疄娌℃湁澶氬鏉? 浣嗘繪瘮涓嶈皟璇曠殑濂?img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-bottom-style: none; border-right-style: none; border-left-style: none" alt="寰瑧" src="http://m.shnenglu.com/images/cppblog_com/sunicdavy/Windows-Live-Writer/lua_D2A5/wlEmoticon-smile_2.png">
pdb鍔犺澆鏄甯哥殑, 浣嗘槸鍫嗘爤娌℃樉紺哄姝ょ畝鍗曠殑絀烘寚閽堣闂綅緗? Google浜嗕互涓?/p>
瑙e喅鏂規硶: Debug->Exception涓皢鎵鏈夊紓甯稿嬀閫夊嵆鍙?/p>
涓嶇煡閬撳摢閲岀殑璁劇疆瀵艱嚧濡傛璇″紓鐨勯棶棰? 瀹崇殑鎴戦噸瑁呬竴嬈?.
CCApplication::sharedApplication()->run(); 鍦╓indows涓嬮櫎浜嗗垵濮嬪寲鍥炶皟澶? 榪樻湁Windows騫沖彴鐗規畩鐨勬秷鎭驚鐜? 鏃㈢劧鏄驚鐜? 榪欎釜run鍑芥暟浼氫竴鐩撮樆濉炲埌紼嬪簭閫鍑? 鍥犳鎴戣嚜鐒剁殑鍦╮un鍚庢坊鍔犺嚜宸辯殑璧勬簮鍗歌澆
鎹㈠埌Android涓婂憿CCApplication::sharedApplication()->run();鐨勫疄鐜板彉浜? 鐢變簬Android涓婃病鏈塛indows鐨勬秷鎭驚鐜? 鎵鏈変簨浠墮兘鏄氳繃java鏂瑰紡鐨勪簨浠墮氱煡. 鍥犳CCApplication::sharedApplication()->run();鍙樻垚浜嗛潪闃誨, 鍙槸鎴戝湪run鍚庢坊鍔犱簡璧勬簮鍗歌澆. 緇撴灉瀵艱嚧緋葷粺鍒氬垵濮嬪寲灝卞嵏杞戒簡璧勬簮, 鍐呭瓨鐩存帴涓嶅彲鐢? 瀵艱嚧鍚庨潰cocos2dx鐨凙PI閮ㄥ垎浣跨敤鏃犻棶棰? 鑰岃嚜宸卞紩鎿庣殑API璋冪敤闂.
cocos2dx鐨勮繖涓猺un鍑芥暟鍛藉悕鏈変弗閲嶉棶棰?. 琚潙浜嗗ソ涔? 榪樹竴鐩存鐤慛DK鍐呭瓨綆$悊鏄惁鏈夌壒孌婁箣澶? 孌婁笉鐭?.
璇鋒敞鎰忎笅杞藉搴斾綘緋葷粺鐨勭増鏈? 64浣嶇郴緇熻淇濊瘉鍚庢枃鍏ㄧ郴浣跨敤64浣嶇▼搴? 浠ュ厤閬囧埌涓嶅繀瑕佺殑楹葷儲
1.JDK&JRE JAVA榪愯鏃跺強寮鍙戝寘
2.ADT 鏄疎clipse鐨勪竴涓彃浠訛紝榪欎竴姝ユ槸涓轟簡綆$悊瀹夊崜寮鍙戝簱
http://developer.android.com/sdk/index.html
浣滀負鏂版墜, 璇蜂笅杞紸DT Bundle For Windows, 榪欎釜鐗堟湰宸茬粡鍖呭惈
ADK錛堝畨鍗撳紑鍙戝寘錛? CDT錛圗clipse鐨凜/C++寮鍙戞彃浠訛級鍙婂搴旂殑Eclipse, 鍙互閬垮厤絎竴嬈¢儴緗插嚭鐜扮殑鍚勭鐑﹀績!
3.NDK 鍙湁ADT宸茬粡鍙互榪愯鏅氱殑Andriod紼嬪簭錛屼絾鏄鏋滈渶瑕佺紪璇慍/C++紼嬪簭錛?榪橀渶瑕丯DK
http://developer.android.com/tools/sdk/ndk/index.html
4. cocos2dx 2.0.4鐗堟湰
鍑嗗SDK API
涓嬭澆濂紸DT鍚庤В鍘嬶紝 鏈夊涓嬬洰褰?/p>
eclipse\ <- 寮鍙戠幆澧?/p>
sdk\ <- Andriod SDK
SDK Manager.exe <-- Android寮鍙戝寘綆$悊鍣? 鐢變簬Andriod鐗堟湰杈冨, 鎵浠ユ綆$悊鍣ㄥ彲浠ユ柟渚垮紑鍙戣呴夋嫨閮ㄧ講鐩爣鏈哄櫒
鎵撳紑SDK Manager鍦ˋndroid 2.2(API 8)閲岀殑 SDK Platform, Google APIs鍓嶆墦鍕? 鐐瑰嚮鍙充笅瑙掔殑Instal packages
濡傛灉鎰熻涓嬭澆閫熷害鎱? 鍙互縐繪榪欓噷http://my.oschina.net/heguangdong/blog/17443, 閫夋嫨Andriod紱葷嚎涓嬭澆
榪欓噷鏄笅杞介摼鎺?/p>
http://dl-ssl.google.com/android/repository/google_apis-8_r02.zip
http://dl-ssl.google.com/android/repository/android-2.2_r02-windows.zip
https://dl-ssl.google.com/android/repository/usb_driver_r04-windows.zip
鎶奱ndroid寮澶寸殑鏂囦歡瑙e帇鍒皃latforms鐩綍涓?/p>
鎶奼oole_apis寮澶寸殑鏂囦歡瑙e帇鍒癮dd-ons鐩綍涓?/p>
鎶妘sb_driver_r03-windows.zip瑙e帇鍒皍sb_driver鐩綍涓嬨?/p>
Eclipse瀵煎叆宸ョ▼
鎵撳紑Eclipse
瀵煎叆Cocos2dx渚嬪瓙宸ョ▼:
Eclipse涓璅ile->New->Other...閫夋嫨Andriod Project from Existing Code
鍦↖mport Projects鐨凴oot Directory涓鍏:\Develop\RevWar\sdk\cocos2d-2.0-x-2.0.4\samples\HelloCpp\proj.android\
娉ㄦ剰, 涓嶈閫変腑 Copy project into workspace, 鍚﹀垯璺緞緙栦貢寰堥毦緙栬瘧鎴愬姛
瀵煎叆cocos2dx鐨刯ava妗嗘灦
鍦╯rc鐩綍涓璶ew package, 杈撳叆org.cocos2dx.lib, 鍦╫rg.cocos2dx.lib鐨刾ackage涓偣Import-> FileSystem
閫変腑鐩綍D:\Develop\RevWar\sdk\cocos2d-2.0-x-2.0.4\cocos2dx\platform\android\java\src\org\cocos2dx\lib\, 鐐歸夋墍鏈塲ava鏂囦歡
宸ョ▼Properties->Builder->New->Program
鍦∕ain鏍囩涓~鍐?/strong>
濉啓NDK緙栬瘧鍛戒護琛?D:\Develop\android-ndk-r8e\ndk-build.cmd
鐐瑰嚮Browser Workspace閫変腑褰撳墠宸ョ▼,鍑虹幇${workspace_loc:/HelloCpp}
鍒囨崲鍒癊nvironment鏍囩涓~鍐?/strong>
鏂板緩NDK_MODULE_PATH 濉啓D:\Develop\RevWar\sdk\cocos2d-2.0-x-2.0.4\;D:\Develop\RevWar\sdk\cocos2d-2.0-x-2.0.4\cocos2dx\platform\third_party\android\prebuilt\
淇敼cocos2dx鐨凙ndroid.mk, diff濡備笅
@@ -153,6 +153,7 @@
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_jpeg_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_libxml2_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_libtiff_static
+LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
# define the macro to compile through support/zip_support/ioapi.c
LOCAL_CFLAGS := -DUSE_FILE32API
@@ -164,3 +165,4 @@
$(call import-module,libpng)
$(call import-module,libxml2)
$(call import-module,libtiff)
+$(call import-module,CocosDenshion/android)
F&Q
andriod-8闂
淇敼D:\Develop\RevWar\sdk\cocos2d-2.0-x-2.0.4cocos2dx\platform\android\java\project.properties涓殑target=android-8鏀規垚浣犻渶瑕佺殑鐗堟湰
resources.ap_ does not exist
assert鐩綍涓湁璧勬簮鍑洪棶棰? 鎺掓煡鍗沖彲
渚嬪: cocos2d-2.0-x-2.0.4\samples\TestCpp\proj.android\assets\Images\*.pvr.gz
鍚姩Android妯℃嫙鍣ㄦ椂鐨凢ailed to allocate memory: 8闂
璋冩暣鍐呭瓨鍊?璇鋒眰鍐呭瓨澶ぇ瀵艱嚧
api鐗堟湰榪囦綆瀵艱嚧JAVA Symbol鏈畾涔夐棶棰?/strong>
setEGLContextClientVersion undefined
api8(andriod 2.2)鍚庣殑鐗堟湰, 鎵嶆敮鎸乷penGL es 2.0
鑷繁鍋氬伐紼嬮亣鍒扮殑闂D:\Develop\RevWar\sdk\cocos2d-2.0-x-2.0.4\/cocos2dx/platform/android/jni/JniHelper.h:28:18: fatal error: string: No such file or directory
灝哻ocos2dx渚嬪瓙涓殑Application.mk鎷瘋繃鏉? 淇敼涓嬪唴閮ㄥ悕縐板嵆鍙?/p>
璋冭瘯璇峰敖閲忎嬌鐢ㄧ湡鏈? 妯℃嫙鍣ㄩ熷害寰堟參
灝忕背2榛樿鍙兘綆$悊鏂囦歡, 鏃犳硶鐢╝db 榪炴帴, 鍥犳闇瑕佸畨瑁呴┍鍔? USB椹卞姩鐩存帴鍦ㄦ彃鍏ョ數鑴戝悗鐨勮櫄鎷熺洏閲屾壘.. 榪欎釜澶潙浜?.
淇濊瘉姣忔閮借兘閮ㄧ講鏈鏂扮殑紼嬪簭
璇鋒墽琛屾瘡嬈lean, Build project, Debug. 鐪熸満涓婂湪闇瑕佹椂, 浼氬脊鍑哄畨瑁?..
Android鍚姩鏃ュ織
甯︽湁ADT鐨凟clipse涓湁涓涓猯ogcat紿楀彛, 閲岄潰鏈夌郴緇熷強紼嬪簭鏈韓鐨勬棩蹇? 鍙互鍋氳繃婊?鏂逛究媯鏌ラ棶棰? 濡傞渶鑷繁鎵撴棩蹇? 鍙互浣跨敤cocos2dx涓殑LOGD瀹忔潵鍋? 鍘熷瀷鏄痏_android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
Remark
娣誨姞assert鍚? F5鍒鋒柊鍚庡啀緙栬瘧
NDK build鏃?榛樿浠庡伐紼嬬殑jni鐩綍寮濮?
Andriod.mk鐨刬mport 鍘熷垯$(call import-module,妯″潡鍚? 榪欓噷鐨勬ā鍧楀悕蹇呴』涓庣洰褰曞悕, 妯″潡make file涓殑鍚嶇О鎶ョ焊涓鑷?
鍙傝冩枃绔?/strong>
http://www.cnblogs.com/ybgame/archive/2012/06/07/2540693.html
鍙戞枃鏃? Andriod Studio宸茬粡鍙戝竷浜嗕竴孌墊椂闂? 铏界劧鏄祴璇曠増, 浣嗗皢浠h〃鏈潵鏇存柟渚跨殑Andriod鍙戝竷宸ュ叿
鍦ㄧ紪鍐欐湰鏂囧墠, 絎旇呬嬌鐢ㄨ繃璇稿libunwind絳夊簱榪涜閿欒鏃跺爢鏍堟墦鍗? 浣嗘槸鍏舵湰韜敱浜庨渶瑕佸紩鐢ㄧ涓夋柟搴? 浣跨敤榪樻槸紼嶅井楹葷儲.
緇忚繃Google鍚? 灞呯劧鎵懼埌涓綃?a >濂芥枃, 鍏墮氳繃鎹曡幏SIGSEGV淇″彿, 騫惰揩浣跨▼搴忚繘鍏db璋冭瘯闃舵, 鍒╃敤gdb寮哄ぇ鐨勮皟璇曞姛鑳藉彲浠ヨ繘琛屽悇縐嶉敊璇窡韙? 姝ゆ硶宸蹭笌Windows涓嬬▼搴忓穿婧冨悗寮瑰嚭VC璋冭瘯鍑犱箮鎺ヨ繎.
鎴戝湪姝ゆ枃鍩虹涓? 鎵╁睍浜嗗叾閫氱敤鎬у強渚垮埄鎬?/p>
1. 浣跨敤gdb鐨?-ex鍙傛暟, 鍦ㄦ寕鎺ョ▼搴忓悗, 鎵цbt鎸囦護鎵撳嚭紼嬪簭鍫嗘爤
2. 灝嗕俊鎭噸瀹氬悜鍒拌嚜瀹氫箟鐨勬枃浠?鍦ㄥ榪涚▼閮介渶瑕佽繘琛屽悗鍙拌緭鍑烘椂甯︽潵鏇村ぇ鐨勭伒媧繪? 鍚屾椂涔熻В鍐充簡gdb鍙兘鍦ㄥ墠鍙拌皟璇曠殑闂
浠g爜濡備笅
#include <stdio.h> #include <stdlib.h> #include <signal.h> #include <string.h> void dump(int signo) { char buf[1024]; char cmd[1024]; FILE *fh; snprintf(buf, sizeof(buf), "/proc/%d/cmdline", getpid()); if(!(fh = fopen(buf, "r"))) exit(0); if(!fgets(buf, sizeof(buf), fh)) exit(0); fclose(fh); if(buf[strlen(buf) - 1] == '/n') buf[strlen(buf) - 1] = '/0'; snprintf(cmd, sizeof(cmd), "gdb %s %d -ex=bt > ./a.txt", buf, getpid()); system(cmd); exit(0); }
鍦ㄦ湇鍔″櫒寮鍚椂,娣誨姞 signal(SIGSEGV, &dump ); 榪涜淇″彿澶勭悊鎸傛帴鍗沖彲
寮曠敤: http://blog.csdn.net/kakaka2011/article/details/6597857 浣滆? kakaka2011
榪欓噷鏃犻渶緙栧啓鎻掍歡鍙婁慨鏀歸厤緗枃浠?鍙渶瑕佸皢瑕佹樉紺虹殑瀛楃涓叉媺鍒癢atch涓?騫跺湪鍙橀噺鍚庨潰娣誨姞,s8鍗沖彲鏄劇ず
鍚屾牱綾誨瀷鐨勫姛鑳戒篃搴旇寰堢啛鎮?/p>
,鏁板瓧 灝嗗彉閲忔媶鍒嗕負鏁扮粍鏄劇ず, 鏁板瓧鏄鏄劇ず澶氬皯浣? 姝ゆ硶瀵筩onst char*榪欑被鍘熷瀛楃涓查潪甯告湁鐢?/p>
,x 16榪涘埗鏌ョ湅
,hr 鏌ョ湅Windows HRESULT瑙i噴
,wm Windows娑堟伅,渚嬪0x0010, wm 鏄劇ず WM_CLOSE
typedef struct tagTHREADNAME_INFO { DWORD dwType; // must be 0x1000 LPCSTR szName; // pointer to name (in user addr space) DWORD dwThreadID; // thread ID (-1=caller thread) DWORD dwFlags; // reserved for future use, must be zero} THREADNAME_INFO;
void SetThreadName( DWORD dwThreadID, LPCSTR szThreadName ) {THREADNAME_INFO info;
info.dwType = 0x1000;
info.szName = szThreadName;
info.dwThreadID = dwThreadID;
info.dwFlags = 0;
// Visit http://m.shnenglu.com/sunicdavy for original article__try
{RaiseException( 0x406D1388, 0, sizeof(info)/sizeof(DWORD), (DWORD*)&info );
}
__except(EXCEPTION_CONTINUE_EXECUTION)
{ int a =1;}
}
浣跨敤鏈熼棿涓鐩存甯? 闅忕潃宸ョ▼闇姹傚彉鍖?鎴戦渶瑕?strong>棰戠箒鐨?/strong>灝嗕竴涓鍛藉悕鐨勭嚎紼嬪垱寤哄伐浣滀竴孌墊椂闂村悗椹笂緇撴潫閲婃斁璧勬簮騫墮噸鏂板垱寤?/strong>,鍑虹幇浜嗘閿侀棶棰?/p>
姝婚攣鎬繪槸鍙戠敓鍦ㄤ富綰跨▼鐨凷leep鎴栬呮槸SetEvent涓や釜WindowsAPI鍑芥暟. 鑰屼笖浠呬粎鍦╒isual Studio 2008閲岃皟璇曟椂浼氬彂鐢熸閿?鑴辯璋冭瘯鐜涓鍒囨甯? 鎴戝紑濮嬫墦鏃ュ織璋冭瘯, 緇撴灉鍙戠幇姝婚攣鍓嶈兘澶熸甯稿垱寤虹嚎紼?浣嗘槸綰跨▼鍑芥暟鏍規湰娌℃湁璋冪敤榪涘叆.涔嬪悗灝卞湪涓葷嚎紼婼leep澶勬閿佷簡. 鐢變簬SetThreadName娌℃湁浣跨敤姝h鐨凙PI鎺ュ彛,鑰屾槸浣跨敤鎶涘紓甯告柟寮? 鑰屼笖綰跨▼鍚嶇О搴旇鍙湪Visual Studio IDE涓墠鑳芥樉紺? MSDN瀵筊aiseException鐨勬弿榪伴噷涔熸湁璇存槑鍙互浣跨敤WaitForDebugEvent鎺ユ敹搴旂敤紼嬪簭鎶涘緱寮傚父.鍥犳鍙互鎺ㄦ柇鏄疭etThreadName閫犳垚鐨勯棶棰? 灞忚斀SetThreadName,嫻嬭瘯閫氳繃
]]>
騫蟲椂瀹夎鏈塚C IDE鐨勬満鍣ㄤ竴瀹氫細紕板埌榪欐牱鐨勬儏鍐碉細濡傛灉紼嬪簭鏈塩rash錛屼細寮瑰嚭涓涓狫IT鐨勮皟璇曞璇濇錛岃闂嬌鐢ㄤ綍縐嶈皟璇曞櫒榪涜璋冭瘯銆傝繖縐嶆儏鍐靛悓鏍蜂細鍑虹幇鍦ㄤ嬌鐢╠ump鏂囦歡鏃躲傝繖涓璇濇涔熸槸鎴戜滑浠婂ぉ闇瑕佺敤鍒扮殑銆?/p>
濡傛灉闇瑕佽皟璇曚竴涓鍙﹀榪涚▼鍚姩鐨勮繘紼嬶紝閭d箞闇瑕佽榪欎釜琚惎鍔ㄧ殑綰跨▼鑳藉惎鍔ㄨ皟璇曞櫒錛屾柟娉曞涓嬶細
鍋囧畾鎴戜滑闇瑕佽皟璇曠殑搴旂敤紼嬪簭鍚嶇О涓簃yapp.exe
1. 鎵撳紑娉ㄥ唽琛?/p>
2. 鍦℉KEY_LOCAL_MACHINE\Software\Microsoftware\Windows NT\CurrentVersion\Image File Execution Options涓鎵緈yapp.exe鏂囦歡澶?/p>
3. 濡傛灉榪欎釜鏂囦歡澶逛笉瀛樺湪錛岄偅涔堝氨鏂板緩涓涓紝渚嬪錛歮yapp.exe
4. 鍦ㄦ枃浠跺す閲屾柊寤轟竴涓瓧絎︿覆閿紝鍚嶇О涓篸ebugger錛屽間負vsjitdebugger.exe
5. 濡傛灉浣跨敤鐨勪笉鏄疺C璋冭瘯鍣紝閭d箞闇瑕佸湪鐜鍙橀噺涓坊鍔犺繖涓猠xe鐨勫惎鍔ㄨ礬寰?/p>
榪愯浣犻渶瑕佽璋冭瘯鐨勭▼搴忚瘯璇曞惂錛岀埥浜嗗惂錛?/p>
杞澆璇鋒敞鏄庢鏂囨潵鑷?鎴橀瓊灝忕瓚鍗氬 http://m.shnenglu.com/sunicdavy
#define MS_VC_EXCEPTION 0x406d1388typedef struct tagTHREADNAME_INFO{ DWORD dwType; // must be 0x1000 LPCSTR szName; // pointer to name (in same addr space) DWORD dwThreadID; // thread ID (-1 caller thread) DWORD dwFlags; // reserved for future use, most be zero} THREADNAME_INFO;
void SetThreadName(DWORD dwThreadID, LPCTSTR szThreadName){THREADNAME_INFO info;
info.dwType = 0x1000;
info.szName = szThreadName;
info.dwThreadID = dwThreadID;
info.dwFlags = 0;
__try
{RaiseException(MS_VC_EXCEPTION, 0, sizeof(info) / sizeof(DWORD),
(DWORD *)&info);
}
except (EXCEPTION_CONTINUE_EXECUTION)
{}
}
綰跨▼鍚嶇О闄愬埗鍦?涓狝NSI瀛楃鍐?璋冪敤榪欎釜鍑芥暟鍚?灝嗚Е鍙戜竴涓皟璇曞櫒寮傚父,VC璋冭瘯鍣ㄥ皢浼氭妸瀛楃涓茶緗負綰跨▼鍚嶇О,騫跺湪璋冭瘯鍣ㄤ腑鏄劇ず
static void __cdecl _initterm (
#endif /* CRTDLL */
_PVFV * pfbegin,
_PVFV * pfend
)
{
/*
* walk the table of function pointers from the bottom up, until
* the end is encountered. Do not skip the first entry. The initial
* value of pfbegin points to the first valid entry. Do not try to
* execute what pfend points to. Only entries before pfend are valid.
*/
while ( pfbegin < pfend )
{
/*
* if current table entry is non-NULL, call thru it.
*/
if ( *pfbegin != NULL )
(**pfbegin)();
++pfbegin;
}
}
榪欎釜鍑芥暟浼氬垵濮嬪寲鎵鏈夐摼鎺ュ埌exe涓殑鍏ㄥ眬鍑芥暟鏋勯? 璺熻釜榪欎釜鍦版柟, 鍙戠幇,鍙湁1涓猯ib涓殑鑳借姝g‘璋冪敤,浣嗘槸鍑洪棶棰樼殑閭d釜lib涓墍鏈夋瀯閫犻兘涓嶈兘琚皟鐢? 灝濊瘯璋冩暣緙栬瘧欏哄簭鏃犳灉
鍞竴鐨勬柟娉曞彧鏈変慨鏀規灦鏋勪負鍦╳inmain鍐呰繘琛屾瀯閫?/p>
濡傛灉鏈夎繖鏂歸潰璋冭瘯緇忛獙鐨勫悓瀛﹀彲浠ュ洖甯?璋㈣阿
fatal error C1075: end of file found before the left brace '{' at 'd:\xxx.cpp(49)' was matched
媯鏌ユ帓闄や唬鐮侊紝鍘婚櫎浜嗗畯錛岀暀涓嬩簡涓鍙?/p>
{__asm int 3;}
灝嗗ぇ鎷彿鍘繪帀錛岃兘緙栬瘧鎴愬姛銆傚幓鎺?涔熻兘緙栬瘧鎴愬姛
鎴戝氨濂囦簡鎬簡錛屾煡浜哅SDN鏂囨。錛岄噷闈㈡槸榪欎箞鍐欑殑錛?/p>
__asm assembly-instruction [ ; ]
__asm { assembly-instruction-list } [ ; ]
__asm assembly-instruction ;opt
__asm { assembly-instruction-list };opt
assembly-instruction;opt
assembly-instruction;assembly-instruction-list;opt
涔熷氨鏄 鍒嗗彿鏄彲閫夌殑錛岃繖涓被浼間簬lua
涓嶅姞鍒嗗彿涔熷彲浠ヨ繖鏍峰啓
__asm mov al, 2 __asm mov dx, 0xD007 __asm out dx, al
浜庢槸涔庯紝鎴戞兂榪欐垚浜嗕竴涓猇C鐨刡ug
緙栬瘧鐜vs2008 c/c++
lua涓紝鏁板間嬌鐢╠ouble鏉ュ瓨鍌紝鍖呭惈鏁村艦鍜宒ouble銆傝岃В鏋愬嚭鏉ョ殑鏁村艦涔熸槸琚己杞負double榪涜瀛樺偍錛岃繖鏍峰氨浼氬嚭闂銆?/p>
涓句竴涓畝鍗曠殑渚嬪瓙錛?/p>
double f = (double)0xffffffff;
int a = int(f);
榪欓噷鐨勬枃绔犺鏄庤繖涓被鍨嬭漿鎹㈤棶棰樼殑緙樼敱銆?/p>
鍦?a >Squirrel鑴氭湰涓氨涓嶄細鏈夎繖涓棶棰?/p>
local a = 0xffffffff
print( a )
緇撴灉涓?1
鏌ョ湅鍏舵簮浠g爜錛?/p>
typedef union tagSQObjectValue
{
struct SQTable *pTable;
struct SQArray *pArray;
struct SQClosure *pClosure;
struct SQGenerator *pGenerator;
struct SQNativeClosure *pNativeClosure;
struct SQString *pString;
struct SQUserData *pUserData;
SQInteger nInteger;
SQFloat fFloat;
SQUserPointer pUserPointer;
struct SQFunctionProto *pFunctionProto;
struct SQRefCounted *pRefCounted;
struct SQDelegable *pDelegable;
struct SQVM *pThread;
struct SQClass *pClass;
struct SQInstance *pInstance;
struct SQWeakRef *pWeakRef;
SQRawObjectVal raw;
}SQObjectValue;
鍙互鐪嬪埌
SQInteger nInteger;
SQFloat fFloat;
鏄垎寮瀛樺偍鐨勶紝鍥犳灝變笉浼氭湁榪欎釜闂
lua瑙e喅鏂規硶錛?/p>
1. 灝嗗崄鍏繘鍒舵崲涓?0榪涘埗瀛樺偍
2. 絳夊緟澶т緺鎴栬呭畼鏂逛慨鏀逛唬鐮侊紝鍋氬嚭patch
lua浠g爜錛?/p>
t = {}
t.FillColor = 0xFFFFFFFF
foo( t )
鍦–++涓敞鍐屼竴涓猣oo鍑芥暟錛岀劧鍚庤幏鍙杢able t涓殑FillColor鎴愬憳
鍙戠幇鍙栧緱鐨勫煎眳鐒朵負0x80000000
浣跨敤lua c api嫻嬭瘯浠g爜
lua_newtable( L );
lua_setglobal( L, "t");
lua_getglobal( L, "t");
lua_pushstring(L,"FillColor");
lua_pushinteger( L, 0xffffffff );
lua_pushinteger( L, -1 );
lua_settable( L, -3 );
lua_getglobal( L, "t");
lua_pushstring( L, "FillColor");
lua_gettable( L, -2 );
int t = lua_tointeger( L, -1 );
緇撴灉t涔熸槸0x80000000
鐒跺悗灝嗗崄鍏繘鍒剁殑0xFFFFFFFF鎹㈡垚鍗佽繘鍒剁殑4294967295錛屾祴璇曠粨鏋滄紜樉紺?1
鍐嶄嬌鐢ㄥ嚑涓牱鏈祴璇?
0xFF5F5F5F = 4284440415 浼氳鏀規垚0xFF5F5F00
榪欎釜bug鍊掓槸寰堝ソ瑙e喅錛屽皢浠g爜涓殑鍗佸叚榪涘埗鏁板叏鎹負10榪涘埗鍗沖彲銆備絾鏄負浠涔堝彧鍦≧elease鐗堟湰鍙戠敓鍛紵
鏈漢浣跨敤鐨勬槸lua 5.1.4 鍘熺敓
闅忓嵆寮濮嬮殧紱諱唬鐮佸垎鏋愶紝褰撻殧紱誨埌涓涓戶鎵垮叕鐢ㄩ潤鎬佸簱鏃訛紝闅旂鍚庝笉浼氬畷鏈恒傝繖琛ㄧず闈欐佸簱涓巈xe涔嬮棿鐨勯摼鎺ュ嚭浜嗕竴浜涢棶棰樸傚啀嬈¤瀵熸寕鎺夌殑鍦版柟鏄劇ずstreambuf涓綾葷殑涓滆タ錛岃繖鏄寘鍚湪iostream閲岀殑涓滆タ錛岀戶緇偣鍑誨爢鏍堝悜涓婅窡韙傜粨鏋滃湪wcout.cpp閲屽彂鐜頒簡
__PURE_APPDOMAIN_GLOBAL static wfilebuf wfout(_cpp_stdout);
鎵鏈夐棶棰樿繋鍒冭岃В錛屽簲璇ユ槸鎭跺績鐨刬ostream鐨勯潤鎬佸彉閲忥紝鍦ㄥ閲嶉潤鎬佸簱閾炬帴鏃剁殑閿欒錛屽鑷磂xe鍚姩錛孋RT涓哄叾鍒嗛厤鍐呭瓨鏃剁殑瀹曟満銆傞┈涓婂睆钄芥墍鏈変嬌鐢ㄨ繃wcout鍙奿ostream鐨勬墍鏈変唬鐮併俽elease鐗堟甯歌繍琛岋紝涓嶅啀瀹曟満
char* pdata = new char(14245); ::memset( pdata, 0, 14245 );
鎴戦┈涓婅繍琛屼唬鐮侊紝緇撴灉鏋滅湡鏄疉ccess Violent銆?/p>
涔嬪悗璇曡繃malloc閮芥病鏈夐棶棰?/p>
闅忔満鎴戞妸榪欐浠g爜鍒犻櫎錛岃繃浜嗗嚑鍒嗛挓鍚庯紝鎴戞寜鐓ц蹇嗭紝閲嶆柊鍐欎笅浠g爜
char* pdata = new char[14245]; ::memset( pdata, 0, 14245 ); 緇撴灉涓峜rash浜嗐傜粏緇嗕竴鐪?/pre>銆?/pre>銆?/pre>銆?/pre>涓哄暐瑕佽皟鐢╟har鐨勬瀯閫犲嚱鏁頒紶鍏?4245鐨勫弬鏁板憿錛熻繖鏍峰彧鑳絥ew鍑烘潵1涓瓧鑺傦紝浣嗘槸memset鍙堝啓浜?4245涓瓧鑺傦紝涓嶆寕鎵嶆湁楝間簡涔嬪悗闂繃寰堝浜猴紝鍩烘湰閮芥病鐪嬪嚭鏉ワ紝鍙榪欎釜鍐欐硶鏋佸叾楠椾漢
]]>
璁板緱鏌愭鍙嬩漢灞傝榪囷紝delete[]鍦╓indows騫沖彴涓婇兘鏄敤HeapFree鏉ュ疄鐜扮殑錛屽洜姝elete[]鍜宒elete鏉ュ垹闄ゅ璞℃暟緇勬椂閮芥槸涓鏍風殑銆備箣鍚庢垜涔熷弬鑰冭繃寰堝鐨勫唴瀛樼鐞嗗櫒鍙妌ew/delete閲嶈澆瀹炵幇,鍩烘湰閮芥槸榪欎釜閬撶悊銆?/p>
鏈榪戠獊鐒跺彂鐜幫紝濡傛灉鏄璞℃暟緇勭殑璇濓紝浣跨敤delete紜疄鑳藉垹闄ゅ唴瀛橈紝浣嗘槸瀵硅薄鏁扮粍涓殑姣忎釜瀵硅薄鐨勬瀽鏋勫氨涓嶈兘琚皟鐢ㄤ簡銆傚垢濂藉鉤鏃朵竴鐩撮兘榪樻槸淇濇寔鑹ソ鐨凜++涔犳儻錛屼竴鐩翠嬌鐢╠elete[]錛屽茍涓斾嬌鐢╪ew[]澶ч儴鍒嗘槸char綾誨瀷錛屼笉闇瑕佹瀽鏋?/p>
google浜嗕竴涓嬶紝鎵懼埌浜嗕竴綃囬鏈夊弬鑰冧環鍊肩殑鏂囩珷
A common error is to link C extension modules (shared libraries) with the static library. The linker command line for extension modules must not ever contain -llua or anything similar!
I.e. check your build process. If you are unsure where the two copies of the Lua core come from, grep the binaries for some characteristic error message, like "table index is nil".
鎴戠殑lua灝佽搴撴槸涓巐ua婧愮爜涓璧峰皝瑁呭湪涓涓潤鎬侀摼鎺ュ簱鎻愪緵緇欐墍鏈夌▼搴忛摼鎺ヤ嬌鐢ㄣ傛湁浜涘伐紼嬪彧鏈?涓猟ll鎴栬卐xe鍗曠嫭閾炬帴錛屼笉浼氬嚭鐜伴棶棰樸傞棶棰樺緢澶х▼搴︿笂灝卞彂鐢熶簬灝嗕竴涓猯ua婧愮爜鏋勬垚鐨勫簱閾炬帴緇欏涓猟ll鎴栬卐xe錛屾垨鑰呮販鏉傞摼鎺ワ紝榪欐牱鏋佹槗鍑虹幇鑾悕鍏跺鐨則able璁塊棶鍒癲ummy_node鐨勯敊璇儏鍐?/pre>鍥犳錛岄┈涓婅皟鏁達紝灝濊瘯灝嗚繖涓簱鏀逛負dll銆備絾鏄湪涓浜涙ā鏉垮嚱鏁板亸鐗瑰寲涓婂嚭鐜頒簡閾炬帴闂銆傛渶鍚庡彂鐜幫紝鍔ㄦ侀摼鎺ュ簱瀹屽叏灝辨槸妯℃澘鐨勫櫓鑰楋紝铏界劧妯℃澘鍑芥暟鏄唴鑱旓紝瀵逛簬鍏ㄥ眬鐨勬ā鏉垮嚱鏁幫紝灝嗗叾鏀懼湪澶存枃浠朵腑灝變細鍑虹幇澶氶噸寮曠敤闂銆傚洜姝ゆ斁寮冿紝灝唋ua5.1鐨勬簮鐮佹斁鍦ㄤ竴涓猟ll涓紝灝嗗皝瑁呭簱鏀懼湪闈欐佸簱涓紝榪欐牱灝辯粷瀵規病鏈変換浣曢棶棰?/pre>
]]>
鍖呭惈鏈夐潤鎬佸簱
motion.lib 涓涓猆I閫昏緫鐨勫簱
HGErender.lib 浣跨敤涓涓猰otion鐨勬帴鍙e疄鐜扮殑HGE娓叉煋鍣紝涓巑otion.lib娌℃湁閾炬帴鍜屼緷璧栧叧緋?/p>
涓涓猠xe闈欐侀摼鎺otion.lib鍜孒GErender.lib
motion涓姞鍏ヤ簡涓浜沠lash鏀寔錛屽皢flash鐨勫寘鍚斁鍒頒簡棰勭紪璇戝ご鏂囦歡錛岃繖閮ㄥ垎澶存枃浠秂xe鏄病鏈夊紩鐢ㄧ殑
exe鍙互姝e父榪愯錛屼絾鏄湪motion涓柊娣誨姞鐨刦lash綾誨疄渚嬪寲鍚庢棤娉曠湅鍒版垚鍛?/p>
閲嶇紪錛岄噸鏂發ink錛屾竻絀洪噸緙栨棤鐢?/p>
鎹㈢敤vs2005錛屼緷鐒舵棤鐢紝浣嗘槸鎶ヤ簡涓涓狤rror: error in OMF type information 閿欒
灝濊瘯灝唂lash鍖呭惈鍒伴緙栬瘧澶寸殑鏂囦歡鏀懼埌瀵瑰鍖呭惈涓紝璁〆xe涔熻兘鐪嬪埌榪欎竴閮ㄥ垎
闂瑙e喅
VS鐨勮皟璇曠郴緇熷茍涓嶆槸瀹屽叏寮鍙戯紝鍥犳鎴戜滑鍙兘浠庝竴浜涜〃璞℃潵鍒嗘瀽涓浜涜皟璇曞櫒鍘熺悊鍙婅涓?/p>
榪欎釜bug鐨勫師鍥犲氨鍦?浣滀負璋冭瘯鍏ュ彛鐨別xe騫舵病鏈夎幏寰楀畬鍏ㄧ殑motion閲岃皟璇曠殑淇℃伅銆傚鏋滃皢motion浣滀負dll鍔犺澆錛岀悊璁哄垎鏋愪笉浼氬嚭鐜拌繖縐嶉棶棰樸俤ll灝嗚浣滀負涓涓崟鐙殑璋冭瘯鍏ュ彛錛岄渶瑕佸崟鐙姞杞界嫭绔嬬殑pdb銆?/p>
鏈緥涓紝闈欐佸簱涓殑璋冭瘯淇℃伅騫舵病鏈夐摼鎺ュ埌exe錛屽洜姝ょ湅涓嶅埌鎴愬憳鐨勪換浣曚俊鎭?/p>
澶у鏁扮殑娓告垙鎴栧簲鐢ㄧ▼搴忛兘鏄嬌鐢ㄩ潤鎬佸簱鏉ュ仛閾炬帴錛岃繖鏍鋒棤璁烘槸緙栧啓榪樻槸浠g爜瀹夊叏閮芥湁鎵鍏奸【銆備絾瀵逛簬宸ョ▼妯″潡涔嬮棿鐨勪簰鐩擱殧紱伙紝C/C++闈欐佸簱鏈韓鐨勬瘺鐥咃紙CRT鍐呭瓨鍒嗛厤鍙婇潤鎬侊紝鍏ㄥ眬鍙橀噺闂錛夊氨鍙樺緱灝や負涓ラ噸銆?/p>
鑰屼嬌鐢ㄥ姩鎬侀摼鎺ュ簱鐨勬帴鍙f柟寮忎篃鏄湁涓閮ㄥ垎紼嬪簭榪欐牱浣跨敤鐨勶紝濡傛灉涓轟簡瀹夊叏鎴栬呭姞瀵嗭紝鍙互灝嗗姩鎬侀摼鎺ュ簱鏀懼埌鑷繁鐨勫寘鍐咃紝浣跨敤浠庡唴瀛樿鍙杁ll鐨勬妧鏈紝榪欐牱瀹夊叏錛屽伐紼嬫灦鏋勫張娓呮櫚
鎴戠殑lua灝佽闈炲父綆鍗曪紝鏀寔C++綾繪垚鍛樺嚱鏁拌皟鐢ㄤ笂涔熸槸鍦╨uaplus鍩虹涓婃敼閫犺屾潵鐨勶細
void register_helper( lua_State* L, int tableindex, const char* funcname, lua_CFunction dispatcher, void* func, int sizeoffunc, const void* userdata, int sizeofud ) { // function | userdata = lightuserdata unsigned char* buffer = (unsigned char*)lua_newuserdata( L, sizeoffunc + sizeofud ); memcpy( buffer, (void*)func, sizeoffunc ); memcpy( buffer + sizeoffunc, &userdata, sizeofud ); lua_pushstring( L, funcname ); lua_pushlightuserdata( L, (void*)buffer); lua_pushcclosure(L, dispatcher, 1); lua_settable( L, tableindex ); }
媯鏌ュ彂鐜幫紝璨屼技鏄痩ua_newuserdata鐨勯棶棰橈紝灝嗗叾鎹負malloc錛岄棶棰樿В鍐充簡銆?/p>
铏界劧鏀寔google浜嗕竴涓嬬被浼肩殑闂錛屽茍涓斾篃鍦╣c搴撳唴鎵撹繃鏂偣錛宯ew鍑烘潵鐨勫唴瀛樼粷闈炵畝鍗曠殑琚玤c鍥炴敹錛岃屾湁鍙兘鏄痩ua鏌愪簺鏈哄埗閫犳垚鐨勶紝姣曠珶榪欐牱緇機++鍋氱粦瀹氭槸寰堝父瑙佺殑
椹笂鍋氫簡涓涓猯ist淇濆瓨鎸囬拡錛屽茍鍦╨ua_close涔嬪墠娓呴櫎榪欎簺鎸囬拡錛屾墍鏈夐棶棰樿繋鍒冭岃В
1. 鏌愪釜淇敼鍚庯紝鏂偣鏃犳硶宸ヤ綔錛屼箣鍓嶇増鏈緷鐒舵甯?
2. 鍙槸鏌愪釜鏂囦歡涓柇鐐規棤娉曞伐浣?
3. 鏂偣鎵撳湪 寮曠敤鍙﹀DLL涓殑綾誨璞
鏂囦歡緇撴瀯錛?
Core.dll
A.cpp
class A { public: A( ) { printf("constructor of a"); } }
UI.dll
Manager.cpp
class Manager { public: Manager( ) { printf("constructor of Manager"); } }
Button.cpp
A ins; // 鏂偣鎵撳湪榪欓噷
Run.exe
void main() { Manager ins; // 瀹炰緥鍖? }
榪欓噷鍙戠幇A鏍規湰涓嶄細琚獵 runtime鍦ㄦ墽琛宮ain涔嬪墠鏋勯?/strong>錛屽洜姝ゆ柇鐐規棤娉曟墦鍒?
宸茬粡鎺掗櫎鐗規畩瀛楃褰卞搷鐨勫師鍥狅紝鎸夌収緗戜笂鐨勬柟娉曟槸錛屽皢鏂囦歡淇濆瓨涓篣NICODE錛岄棶棰樹緷鏃?
寮濮嬬敤鎺掗櫎闅旂娉曠‘瀹氶棶棰樹綅緗紝鏈鍚庡彂鐜拌繖鏍蜂竴涓寰嬶細
鍙鍦∕anager.cpp閲屾瀯閫犱竴涓狟utton
Button insB;
榪欐牱鍋氫簡浠ュ悗錛屾柇瀹氬繀瀹氳兘璧蜂綔鐢ㄣ?
鍥犳鎺ㄦ柇CRT灞傜殑鍏ㄥ眬鏋勯犳槸闇瑕佷竴涓摼琛ㄦ潵鎺ㄥ姩鐨?
鍥犱負Manager闇瑕佹瀯閫狅紝鍥犳CRT鑲畾浼氭壂鎻忚繖涓狢PP瀵瑰簲OBJ閾炬帴鍒癳xe閲岀殑孌碉紝璁╄繖涓閲岀殑鍏ㄥ眬鏋勯犲嚱鏁伴兘鍒濆鍖栵紝浣嗘槸Button鍥犱負娌℃湁浣跨敤錛屽洜姝や篃涓嶄細鏋勯犮傝繖鏍峰眬閮ㄦ壂鎻忓簲璇ユ槸鍑轟簬鏁堢巼.
瑙e喅榪欎釜闂榪樻湁涓涓柟娉曞氨鏄叏閮ㄤ嬌鐢ㄩ潤鎬侀摼鎺ユ柟寮忥紝榪欐牱鏋勯犱唬鐮侀兘鏀懼埌鏈鍚庣殑exe涓紝灝變笉浼氬嚭鐜拌繖鏍風殑闂
緇間笂鎵榪幫紝鍩烘湰鍙互鏂畾VC鐨勬柇鐐硅淇濆瓨浜庝唬鐮佺殑灝鵑儴鐨勬煇涓綅緗紝鐪嬩笉瑙佺殑涓浜涘瓧絎?/p>
瀵逛簬 "寰峰浗"
浠栦滑鍙戦佺殑緙栫爜鏁版嵁涓?d3 ec 3f
鑰屾垜浠殑涓枃緋葷粺涓?b5 c2 b9 fa
鍥犱負鑱婂ぉ緋葷粺閲囩敤ANSI鐨勬灦鏋勶紝浣嗘槸涓轟粈涔堝悓鏄笢鏂硅璦緋伙紝涓涓細鏄疷TF8,涓涓槸ANSI鍙屽瓧鑺傦紝鍥犳灝嗚亰澶╃郴緇熸暣浣撳彂閫佹崲鎴愮函UNICODE榪涜嫻嬭瘯