战魂小筑

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

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  257 随笔 :: 0 文章 :: 506 评论 :: 0 Trackbacks

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

image

5. 在新创建的松鼠工程属性中如下图设置

image 

Interpreter其实就是启动调试器(不是sq.exe)

WorkingDirectory 就是main.nut所在的目录(官网的路径设置有点误导)

Command Line Options 就是传入sqdbg.exe的命令行参数

修改下main.nut文件,例如:

for(local i = 1;i<10;i++)
{
    print( i );
}

在print语句前打上断点,调试松鼠工程,即可看到调试结果

image

 

有关于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引用另外的代码即可

posted on 2011-05-14 17:42 战魂小筑 阅读(5040) 评论(5)  编辑 收藏 引用 所属分类: 脚本技术C++/ 编程语言

评论

# re: 小试Squirrel松鼠脚本的远程调试功能 2011-05-14 17:49 战魂小筑
补充下, 还需要下载VS2008的IDE
http://forum.squirrel-lang.org/default.aspx?g=posts&t=1934  回复  更多评论
  

# re: 小试Squirrel松鼠脚本的远程调试功能 2011-05-19 00:26 xoyojank
这东西性能比不上lua啊, 更不用说luajit了  回复  更多评论
  

# re: 小试Squirrel松鼠脚本的远程调试功能 2011-05-20 23:27 战魂小筑
@xoyojank
这东西本来就是一个深度lua使用者的作品,看过一些评测,反而比lua快.
lua没有OO, 松鼠可以支持OO, 开发效率其实更重要  回复  更多评论
  

# re: 小试Squirrel松鼠脚本的远程调试功能 2011-07-23 19:43 opengl32
4. 在这个Solution下,创建一个Squirrel松鼠工程


我没有找到sq的工程. 请问博主是不是漏了什么步骤?  回复  更多评论
  

# re: 小试Squirrel松鼠脚本的远程调试功能 2013-09-04 12:41 775202440@qq.com
sqdbg调用的对象已与客户端断开连接 这是什么问题呢? 我设置以后总是出现这个问题。  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理