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

詳解關(guān)于Lua調(diào)試器代碼實(shí)現(xiàn)

移動開發(fā) iOS
關(guān)于Lua調(diào)試器代碼實(shí)現(xiàn)是本文要介紹的內(nèi)容,主要是來了解LUA調(diào)試器的使用,不多說,具體內(nèi)容來看本文詳解。

關(guān)于Lua調(diào)試器代碼實(shí)現(xiàn)是本文要介紹的內(nèi)容,主要是來了解LUA調(diào)試器的使用,不多說,具體內(nèi)容來看本文詳解。

1、http://www.unknownworlds.com/decoda,這個工具可以注入到宿主程序內(nèi)對lua腳本進(jìn)行調(diào)試。

2、有2種方式對lua進(jìn)行調(diào)試

從Decoda啟動宿主程序

(1)project菜單中的Settings

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

詳解關(guān)于Lua調(diào)試器代碼實(shí)現(xiàn)

(3)用它打開lua腳本設(shè)置斷點(diǎn)。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虛擬機(jī)   
  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. * 關(guān)閉lua虛擬機(jī) void stopLuaDebug() lua_close(L);  
  85. }  
  86.  
  87. /*  
  88. * funName 函數(shù)名稱  
  89. * param[] 參數(shù)數(shù)組  
  90. * len     參數(shù)的長度  
  91. * bret    是否有返回結(jié)果  
  92. * pRet    返回的結(jié)果 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.     // 為了便于擴(kuò)展和應(yīng)用這里不采用[ lua_type(L,lua_gettop(L)) ]而由參數(shù)指定類型  
  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; //這里留給具體要用時再去擴(kuò)展。    }  
  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); 

調(diào)試過程圖

詳解關(guān)于Lua調(diào)試器代碼實(shí)現(xiàn)

Decoda注入宿主程序的調(diào)試方法

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

2、選擇decoda debug菜單。中的Processes選項(xiàng)。

詳解關(guān)于Lua調(diào)試器代碼實(shí)現(xiàn)

3、選擇宿主程序Attach。

4、ok

小結(jié):詳解關(guān)于Lua調(diào)試器代碼實(shí)現(xiàn)的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對你有所幫助!

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-08-31 16:47:07

Lua調(diào)試器

2011-08-24 16:41:38

lua調(diào)試器

2011-08-24 11:08:09

Lua

2011-08-31 16:51:12

Lua調(diào)試器

2011-08-25 16:34:27

Lua調(diào)試器

2009-12-14 10:57:34

Ruby調(diào)試器

2020-03-16 10:05:13

EmacsGUDLinux

2010-03-01 11:06:52

Python 調(diào)試器

2016-09-27 20:12:33

Android虛擬機(jī)Android動態(tài)調(diào)試

2011-08-24 15:28:02

Lua編譯器解釋器

2023-02-28 11:39:55

CMake腳本項(xiàng)目

2010-02-24 09:32:24

Python 調(diào)試器

2022-05-23 09:22:20

Go語言調(diào)試器Delve

2009-06-23 11:05:05

Mircosoft C

2011-08-25 10:07:24

Lua 5.0函數(shù)編譯器

2022-07-22 12:45:39

GNU

2023-03-13 00:21:21

調(diào)試器斷點(diǎn)開發(fā)者

2011-08-24 14:33:14

LUA開發(fā)環(huán)境Decoda

2011-08-25 17:25:55

LUADelphi

2011-08-25 14:03:32

UbuntuLUA安裝
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美一区二区三区 | 免费一级大片 | 亚洲精品视频免费 | 欧美日韩久 | 99久久国产免费 | 免费看淫片 | 精品国产乱码久久久久久闺蜜 | 天天爽夜夜操 | 久久亚洲欧美日韩精品专区 | 一区二区三区四区免费视频 | www4虎| 99资源| 成人av激情 | 欧美日韩18 | 视频一区在线观看 | caoporn视频 | 欧美成人精品在线 | 亚洲福利网站 | 亚洲综合区 | 久久久久久久久久爱 | 正在播放国产精品 | 婷婷桃色网 | 亚洲国产福利视频 | 欧美在线观看一区二区 | 精品久久一区 | 男人的天堂亚洲 | av中文字幕在线观看 | 日韩精品免费在线 | 日本电影免费完整观看 | 中文字幕91av | www国产成人免费观看视频,深夜成人网 | 国产三级一区二区三区 | 成年人网站在线观看视频 | 亚洲国产成人精品久久 | 国产一区视频在线 | 综合色久 | 91精品一区二区三区久久久久久 | 日韩免费视频 | 一区二区在线不卡 | 欧美又大粗又爽又黄大片视频 | 波多野结衣一区二区三区在线观看 |