码迷,mamicode.com
首页 > 其他好文 > 详细

小试Squirrel松鼠脚本的远程调试功能

时间:2020-03-14 22:11:53      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:push   remote   connected   load   att   span   standards   cpp   rem   

等了大半年,松鼠脚本终于释出了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的代码

 int main(int argc, char *argv[])
  {
      if(argc < 2){
             scprintf(_SC("SQDBG error : no file specified"));
             return -1;
        }

         HSQUIRRELVM v = sq_open(1024);
         sqstd_seterrorhandlers(v);
     
        //!! INITIALIZES THE DEBUGGER ON THE TCP PORT 1234
        //!! ENABLES AUTOUPDATE
        HSQREMOTEDBG rdbg = sq_rdbg_init(v,1234,SQTrue);
        if(rdbg) {
     
           //!! ENABLES DEBUG INFO GENERATION(for the compiler)
           sq_enabledebuginfo(v,SQTrue);
    
           sq_setprintfunc(v,printfunc,errorfunc);
  
          //!! SUSPENDS THE APP UNTIL THE DEBUGGER CLIENT CONNECTS
          if(SQ_SUCCEEDED(sq_rdbg_waitforconnections(rdbg))) {
                scprintf(_SC("connected\n"));
     
               const SQChar *fname=NULL;
   #ifdef _UNICODE
               SQChar sTemp[256];
               mbstowcs(sTemp,argv[1],(int)strlen(argv[1])+1);
               fname=sTemp;
  #else
               fname=argv[1];
  #endif 
                //!!REGISTERS STANDARDS LIBS
                sq_pushroottable(v);
                sqstd_register_bloblib(v);
                sqstd_register_iolib(v);
                //!!EXECUTE A SCTIPT
                if(SQ_FAILED(sqstd_dofile(v,fname,SQFalse,SQTrue))) {
                    PrintError(v);
                    _getch();
                }
                }
           //!! CLEANUP
           sq_rdbg_shutdown(rdbg);
        }
       else {
          PrintError(v);
     }
    sq_close(v);
 

发现写这个库的老外还是很认真的,使用了sq_rdbg作为debugger的api前缀,意味着这个库代码是可以复用的.

注意第38行:

 

 

sqstd_dofile(v,fname,SQFalse,SQTrue)

这就是SQDBG只能debug 1个文件的原因.

如果需要在项目中做远程调试,只需要将这句代码换为工程中加载所有脚本的代码和注册系统API代码即可

 

当然,最简单的方法,直接在代码顶端添加dofile引用另外的代码即可

 

 

战魂小筑

讨论群:309800774 知乎关注:http://zhihu.com/people/sunicdavy 开源项目:https://github.com/davyxu

http://www.cppblog.com/sunicdavy/archive/2011/05/14/146376.html

小试Squirrel松鼠脚本的远程调试功能

标签:push   remote   connected   load   att   span   standards   cpp   rem   

原文地址:https://www.cnblogs.com/liyuzh552200/p/Squrriel.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!