松鼠脚本可以说是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语句前打上断点,调试松鼠工程,即可看到调试结果
有关于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引用另外的代码即可 |
|