等了大半年,松鼠腳本終于釋出了3.0穩定版本
松鼠腳本可以說是Lua的超級增強版,作者在Crysis項目使用Lua多年,深知Lua的優缺點.之后自己編寫了松鼠腳本來解決諸如class,attribute,delegation,更強大的thread,exception等等功能.
松鼠腳本本身對Windows開發人員極為照顧,第三方庫可謂豐富,遠程調試,代碼加色及語法檢查都可以直接在VS2008的IDE中進行.
簡單的遠程調試功能需要以下步驟:
1. 下載松鼠腳本3.0版本
2. 在松鼠腳本Wiki中下載SQDBG遠程調試庫
3. 將sqdbg工程放到SQUIRREL3之下,打開SQUIRREL3\squirrel.sln,將sqdbg添加到工程,編譯所有
4. 在這個Solution下,創建一個Squirrel松鼠工程

5. 在新創建的松鼠工程屬性中如下圖設置
Interpreter其實就是啟動調試器(不是sq.exe)
WorkingDirectory 就是main.nut所在的目錄(官網的路徑設置有點誤導)
Command Line Options 就是傳入sqdbg.exe的命令行參數
修改下main.nut文件,例如:
for(local i = 1;i<10;i++)
{
print( i );
}
在print語句前打上斷點,調試松鼠工程,即可看到調試結果
有關于SQDBG多文件調試:
SQDBG默認只能調試1個文件,顯然是個玩具,不能應對游戲和其他領域的多文件調試. 分析了下SQDBG的代碼
1: int main(int argc, char *argv[])
2: {
3: if(argc < 2){
4: scprintf(_SC("SQDBG error : no file specified"));
5: return -1;
6: }
7:
8: HSQUIRRELVM v = sq_open(1024);
9: sqstd_seterrorhandlers(v);
10:
11: //!! INITIALIZES THE DEBUGGER ON THE TCP PORT 1234
12: //!! ENABLES AUTOUPDATE
13: HSQREMOTEDBG rdbg = sq_rdbg_init(v,1234,SQTrue);
14: if(rdbg) {
15:
16: //!! ENABLES DEBUG INFO GENERATION(for the compiler)
17: sq_enabledebuginfo(v,SQTrue);
18:
19: sq_setprintfunc(v,printfunc,errorfunc);
20:
21: //!! SUSPENDS THE APP UNTIL THE DEBUGGER CLIENT CONNECTS
22: if(SQ_SUCCEEDED(sq_rdbg_waitforconnections(rdbg))) {
23: scprintf(_SC("connected\n"));
24:
25: const SQChar *fname=NULL;
26: #ifdef _UNICODE
27: SQChar sTemp[256];
28: mbstowcs(sTemp,argv[1],(int)strlen(argv[1])+1);
29: fname=sTemp;
30: #else
31: fname=argv[1];
32: #endif
33: //!!REGISTERS STANDARDS LIBS
34: sq_pushroottable(v);
35: sqstd_register_bloblib(v);
36: sqstd_register_iolib(v);
37: //!!EXECUTE A SCTIPT
38: if(SQ_FAILED(sqstd_dofile(v,fname,SQFalse,SQTrue))) {
39: PrintError(v);
40: _getch();
41: }
42: }
43: //!! CLEANUP
44: sq_rdbg_shutdown(rdbg);
45: }
46: else {
47: PrintError(v);
48: }
49: sq_close(v);
發現寫這個庫的老外還是很認真的,使用了sq_rdbg作為debugger的api前綴,意味著這個庫代碼是可以復用的.
注意第38行:
sqstd_dofile(v,fname,SQFalse,SQTrue)
這就是SQDBG只能debug 1個文件的原因.
如果需要在項目中做遠程調試,只需要將這句代碼換為工程中加載所有腳本的代碼和注冊系統API代碼即可
當然,最簡單的方法,直接在代碼頂端添加dofile引用另外的代碼即可