成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解關于Lua調試器代碼實現

移動開發 iOS
關于Lua調試器代碼實現是本文要介紹的內容,主要是來了解LUA調試器的使用,不多說,具體內容來看本文詳解。

關于Lua調試器代碼實現是本文要介紹的內容,主要是來了解LUA調試器的使用,不多說,具體內容來看本文詳解。

1、http://www.unknownworlds.com/decoda,這個工具可以注入到宿主程序內對lua腳本進行調試。

2、有2種方式對lua進行調試

從Decoda啟動宿主程序

(1)project菜單中的Settings

(2)在commond中填入你要運行的宿主程序。點擊ok

詳解關于Lua調試器代碼實現

(3)用它打開lua腳本設置斷點。Decoda 中選擇Start Debugging

下面是簡單的例子。

  1. main.cpp  
  2.  
  3. #include <iostream> 
  4. #include "luaDebug.h"  
  5.  
  6. using namespace std;  
  7.  
  8. int main() startLuaDebug();  
  9. DebugFile("add.lua");  
  10. ParamData in[1];  
  11. ParamData out;  
  12. in[0].tt = PNUM; in[0].value.p = "HELLO: ";  
  13. out.tt = PNUM;  
  14.  
  15. DebugFunction("Hello",in,1,1,&out);  
  16.  
  17. stopLuaDebug();  
  18.  
  19. printf("%s\n",out.value.p);  
  20. system("pause");  
  21. return 0;  
  22. }  
  23.  
  24. luaDebug.h  
  25.  
  26. #ifndef LUA_DEBUG_H  
  27. #define LUA_DEBUG_H  
  28.  
  29. enum TT NIL,   // null  
  30. BNUM,   // boolean  
  31. CNUM,   // char  
  32. INUM,   // int  
  33. LNUM,   // long  
  34. FNUM,   // float | double  
  35. PNUM,   // char *  
  36. VNUM        // void *  
  37. };  
  38.  
  39. typedef union ParamValue bool b;  
  40. char c;  
  41. int i;  
  42. long l;  
  43. float f;  
  44. char *p;  
  45. void *v;  
  46. }ParamValue;  
  47.  
  48. typedef struct ParamData int tt;  
  49. ParamValue value;  
  50. }ParamData;  
  51.  
  52. int startLuaDebug();  
  53. void stopLuaDebug();  
  54. int DebugFile(char *filename);  
  55. void DebugFunction(char *funName,   
  56.        ParamData param[],   
  57.        int len,   
  58.        bool bret,  
  59.        ParamData *pRet  
  60.        );  
  61.  
  62. #endif  
  63.  
  64. luaDebug.cpp  
  65.  
  66. #include <stdio.h> 
  67. #include <iostream> 
  68. #include <stdlib.h> 
  69. #include "lua.hpp"  
  70. #include "luaDebug.h"  
  71.  
  72. lua_State *L;   
  73.  
  74. /*  
  75. * 開啟lua虛擬機   
  76. * ret 1 => open vm error!  
  77. *     0 => open vm success! int startLuaDebug() L = lua_open();  
  78. if(L == NULL) return 1;  
  79. luaL_openlibs(L);  
  80. return 0;  
  81. }  
  82.  
  83. /*  
  84. * 關閉lua虛擬機 void stopLuaDebug() lua_close(L);  
  85. }  
  86.  
  87. /*  
  88. * funName 函數名稱  
  89. * param[] 參數數組  
  90. * len     參數的長度  
  91. * bret    是否有返回結果  
  92. * pRet    返回的結果 void DebugFunction(char *funName,   
  93.        ParamData param[],   
  94.        int len,   
  95.        bool bret,  
  96.        ParamData *pRet {  
  97. if(NULL == L || funName == NULL) return;  
  98. lua_getglobal(L, funName);  
  99. for(int i = 0; i < len; i++) {  
  100.    switch(param[i].tt) {  
  101.     case BNUM:   
  102.      lua_pushboolean(L,param[i].value.b);    
  103.      break;  
  104.     case CNUM:   
  105.      lua_pushinteger(L,(int)param[i].value.c);   
  106.      break;  
  107.     case INUM:   
  108.      lua_pushinteger(L,param[i].value.i);    
  109.      break;  
  110.     case LNUM:   
  111.      lua_pushinteger(L,param[i].value.l);    
  112.      break;  
  113.     case FNUM:   
  114.      lua_pushnumber(L,param[i].value.f);    
  115.      break;  
  116.     case PNUM:       lua_pushstring(L,param[i].value.p);  
  117.       break;     case VNUM:       lua_pushlightuserdata(L,param[i].value.v);  
  118.       break;    }  
  119. } lua_call(L,len,(int)bret);  
  120. if(bret) {  
  121.    if(pRet != NULL) {  
  122.     // 為了便于擴展和應用這里不采用[ lua_type(L,lua_gettop(L)) ]而由參數指定類型  
  123.     switch(pRet->tt) {  
  124.      case BNUM: pRet->value.b = lua_toboolean(L,-1); break;  
  125.      case CNUM: pRet->value.c = (char)lua_tointeger(L,-1); break;  
  126.      case INUM: pRet->value.i = lua_tointeger(L,-1); break;  
  127.      case LNUM: pRet->value.l = lua_tointeger(L,-1); break;  
  128.      case FNUM: pRet->value.f = lua_tonumber(L,-1); break;  
  129.      case PNUM:        char *pRetTemp = (char *)malloc(strlen(lua_tostring(L,-1)) + 1);  
  130.        strcpy(pRetTemp,lua_tostring(L,-1));  
  131.        pRet->value.p = pRetTemp;   
  132.        break;      case VNUM: break; //這里留給具體要用時再去擴展。    }  
  133.  
  134.    lua_pop(L,1); }  
  135.  
  136. /*  
  137. * filename 文件名  
  138. * ret 1 => debug error!  
  139. *      0 => debug success! int DebugFile(char *filename) if(filename == NULL) return 1;  
  140. if(NULL == L) return 1;  
  141. return luaL_dofile(L,filename);  
  142. }     
  143.  
  144. add.lua  
  145.  
  146. function Hello(a)  
  147.     local c = a .. "yegui!";  
  148.     return c;  
  149. end  
  150.  
  151. local i = 3 
  152. local j = 4 
  153. local k = i + j  
  154. print(k); 

調試過程圖

詳解關于Lua調試器代碼實現

Decoda注入宿主程序的調試方法

1、在宿主程序中放入getch()等暫停操作(貌似不能用設置斷點的方式,否則Decoda將會異常。為什么會這樣有待進一步學習),運行宿主程序

2、選擇decoda debug菜單。中的Processes選項。

詳解關于Lua調試器代碼實現

3、選擇宿主程序Attach。

4、ok

小結:詳解關于Lua調試器代碼實現的內容介紹完了,希望通過本文的學習能對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-08-31 16:47:07

Lua調試器

2011-08-24 16:41:38

lua調試器

2011-08-24 11:08:09

Lua

2011-08-31 16:51:12

Lua調試器

2011-08-25 16:34:27

Lua調試器

2009-12-14 10:57:34

Ruby調試器

2020-03-16 10:05:13

EmacsGUDLinux

2010-03-01 11:06:52

Python 調試器

2016-09-27 20:12:33

Android虛擬機Android動態調試

2011-08-24 15:28:02

Lua編譯器解釋器

2023-02-28 11:39:55

CMake腳本項目

2010-02-24 09:32:24

Python 調試器

2022-05-23 09:22:20

Go語言調試器Delve

2009-06-23 11:05:05

Mircosoft C

2011-08-25 10:07:24

Lua 5.0函數編譯器

2022-07-22 12:45:39

GNU

2011-08-23 17:42:42

Lua腳本

2011-08-24 14:33:14

LUA開發環境Decoda

2011-08-25 17:25:55

LUADelphi

2011-08-25 14:03:32

UbuntuLUA安裝
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩中文字幕网 | 国产一区二区三区在线 | 亚洲精品久久久久久久不卡四虎 | 国产精品久久久久国产a级 欧美日韩国产免费 | 欧美日韩国产高清 | 日本欧美国产在线观看 | 91超碰在线| 99热这里都是精品 | 夜夜爽99久久国产综合精品女不卡 | 成人一区二区在线 | 欧美日韩精品免费 | 久草网在线视频 | 午夜电影福利 | 国产精品久久久久久久久久久久久久 | 在线视频一区二区 | www.亚洲区| 激情五月婷婷综合 | 免费黄色片在线观看 | 北条麻妃国产九九九精品小说 | 欧美精品在线一区二区三区 | 欧美日一区二区 | 99精品久久 | 欧美一级三级 | 欧美成人一区二区三区 | 亚洲成人三级 | 高清国产午夜精品久久久久久 | 亚洲精品一区二区三区四区高清 | 国产小视频在线看 | 亚洲一区二区在线 | 国产精品久久久久久久久久久久冷 | 在线播放国产一区二区三区 | 国产成人一区二区三区 | 少妇精品久久久久久久久久 | 亚洲一区视频在线播放 | 国产日韩免费观看 | 日韩在线观看视频一区 | 久久久久亚洲av毛片大全 | 黑人巨大精品欧美一区二区免费 | 美女福利视频网站 | 成人免费视频一区二区 | 天天综合成人网 |