`
thinkry
  • 浏览: 38411 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

haxe的cpp_target是如何加入内置调试功能的

阅读更多

在gamehaxe.com上huge介绍了hxcpp模块的内置调试功能,我有些好奇它是怎么实现的,就开始翻看相应的代码。

 

首先,从haxe源码看,haxe是用OCaml编译出来的(OCaml不太熟悉),而haxe的作用是先把hx源码转为对应的as3/cpp/java代码,再编译成目标程序。从haxe源码中的gencpp.ml里能看到许多HXCPP_DEBUGGER和HX_STACK_XXXX的宏,说明haxe在hx->cpp过程中,插入了大量的宏来处理当前的文件名、行号、变量等信息。

 

再来看hxcpp的代码,在include/hx/Debug.h中能看到HX_STACK_XXXX的定义,例如

 

#ifdef HXCPP_DEBUGGER
#define HX_STACK_LINE(l) { __autostack.mLocation->mLine=l; if (hx::gBreakpoint) hx::CheckBreakpoint(); }
#else
#define HX_STACK_LINE(l) { __autostack.mLocation->mLine=l; }
#endif

 这样目标程序执行时,每行haxe代码所对应的cpp代码之前,都是执行这个CheckBreakpoint()函数,从而决定是否断点。

 

hxcpp实现了断点,但单步还没实现,huge说时间忙,不知道哪个版本会有结果,期待吧。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics