日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

lua学习笔记(4)-- 搭建mobdebug 远程开发环境

發(fā)布時間:2024/3/26 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lua学习笔记(4)-- 搭建mobdebug 远程开发环境 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

近期參與公司的項(xiàng)目重構(gòu)太忙了。很久都沒更新博客,今天整理一下最近的 關(guān)于lua部分的實(shí)現(xiàn),希望給后來的人一個參考吧。
項(xiàng)目的資料會開源在這 這里 不要在跟我要代碼了!

https://gitee.com/jeasonb/lua_debug/

1 .從lua 源碼到自己的lua 解釋器

1.0 下載源碼

lua的源碼可以從以下的lua 官網(wǎng)下載

http://www.lua.org/

執(zhí)行以下的指令可以編譯lua的解釋器

curl -R -O http://www.lua.org/ftp/lua-5.4.4.tar.gz tar zxf lua-5.4.4.tar.gz cd lua-5.4.4 make all test

1.1 代碼編譯

[jeason@centos7:~/lua_debug]$ [jeason@centos7:~/lua_debug]$ tar zxf lua-5.4.4.tar.gz [jeason@centos7:~/lua_debug]$ cd lua-5.4.4 [jeason@centos7:~/lua_debug/lua-5.4.4]$ make all test make[1]: Entering directory `/home/jeason/lua_debug/lua-5.4.4/src' Guessing Linux make[2]: Entering directory `/home/jeason/lua_debug/lua-5.4.4/src' make all SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl" make[3]: Entering directory `/home/jeason/lua_debug/lua-5.4.4/src' gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lapi.o lapi.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c lcode.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lctype.o lctype.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o ldebug.o ldebug.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o ldo.o ldo.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o ldump.o ldump.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lfunc.o lfunc.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lgc.o lgc.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c llex.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lmem.o lmem.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lobject.o lobject.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lopcodes.o lopcodes.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c lparser.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lstate.o lstate.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lstring.o lstring.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o ltable.o ltable.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o ltm.o ltm.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lundump.o lundump.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lvm.o lvm.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lzio.o lzio.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lauxlib.o lauxlib.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lbaselib.o lbaselib.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lcorolib.o lcorolib.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o ldblib.o ldblib.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o liolib.o liolib.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lmathlib.o lmathlib.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o loadlib.o loadlib.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o loslib.o loslib.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lstrlib.o lstrlib.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o ltablib.o ltablib.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lutf8lib.o lutf8lib.c gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o linit.o linit.c ar rcu liblua.a lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o lauxlib.o lbaselib.o lcorolib.o ldblib.o liolib.o lmathlib.o loadlib.o loslib.o lstrlib.o ltablib.o lutf8lib.o linit.o ranlib liblua.a gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lua.o lua.c gcc -std=gnu99 -o lua lua.o liblua.a -lm -Wl,-E -ldl gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o luac.o luac.c gcc -std=gnu99 -o luac luac.o liblua.a -lm -Wl,-E -ldl make[3]: Leaving directory `/home/jeason/lua_debug/lua-5.4.4/src' make[2]: Leaving directory `/home/jeason/lua_debug/lua-5.4.4/src' make[1]: Leaving directory `/home/jeason/lua_debug/lua-5.4.4/src' make[1]: Entering directory `/home/jeason/lua_debug/lua-5.4.4/src' ./lua -v Lua 5.4.4 Copyright (C) 1994-2022 Lua.org, PUC-Rio make[1]: Leaving directory `/home/jeason/lua_debug/lua-5.4.4/src' [jeason@centos7:~/lua_debug/lua-5.4.4]$ ls -l ./src/lua -rwxrwxr-x. 1 jeason jeason 281168 Jun 2 22:41 ./src/lua [jeason@centos7:~/lua_debug/lua-5.4.4]$

1.3 簡單的執(zhí)行一下 看看效果

[jeason@centos7:~/lua_debug/lua-5.4.4/src]$ ./lua Lua 5.4.4 Copyright (C) 1994-2022 Lua.org, PUC-Rio > > print("Hellow World!") Hellow World!

2 . 簡單的認(rèn)識一下lua的鉤子函數(shù)

function my_hook()print("my_hook enter ... ")end -- require("debug").sethook(my_hook,"l") print("1") print("12") print("123") print("1234") print("12345") print("123456") -- 輸出結(jié)果如下: -- 1 -- 12 -- 123 -- 1234 -- 12345 -- 123456

加入鉤子函數(shù)之后的執(zhí)行結(jié)果如下:

function my_hook()print("my_hook enter ... ")end require("debug").sethook(my_hook,"l") print("1") print("12") print("123") print("1234") print("12345") print("123456") -- 輸出: -- my_hook enter ... -- 1 -- my_hook enter ... -- 12 -- my_hook enter ... -- 123 -- my_hook enter ... -- 1234 -- my_hook enter ... -- 12345 -- my_hook enter ... -- 123456

關(guān)于鉤子函數(shù)的調(diào)用方面,鉤子函數(shù)支持 三種事件
①行事件 , ② 函數(shù)進(jìn)入事件 ③ 函數(shù)退出事件
我用的比較多的 是行事件,好像還有一種計(jì)數(shù)事件,我沒怎么用過 不是很了解 ,要想注冊這些事件 ,只需要在注冊鉤子的時候?qū)⒌诙€參數(shù) 的字符串內(nèi)寫上對應(yīng)的縮寫 l f r 分別對應(yīng)上述的三種事件 ,如果要公式注冊上述的三個事件 那么代碼如下:

function my_hook()print("my_hook enter ... ")end require("debug").sethook(my_hook,"lrf") print("1") print("12") print("123") print("1234") print("12345") print("123456") -- my_hook enter ... 行事件 -- my_hook enter ... 函數(shù)事件 -- 1 -- my_hook enter ... 行事件 -- my_hook enter ... 函數(shù)事件 -- 12 -- my_hook enter ... 行事件 -- my_hook enter ... 函數(shù)事件 -- 123 -- my_hook enter ... 行事件 -- my_hook enter ... 函數(shù)事件 -- 1234 -- my_hook enter ... 行事件 -- my_hook enter ... 函數(shù)事件 -- 12345 -- my_hook enter ... 行事件 -- my_hook enter ... 函數(shù)事件 -- 123456 -- my_hook enter ... 行事件 -- my_hook enter ... 函數(shù)事件 -- my_hook enter ... 退出事件

3. 搭建lua 調(diào)試環(huán)境

通過上面 我們已經(jīng)知道了 我們可以通過注冊鉤子函數(shù)監(jiān)控代碼的執(zhí)行過程。
那么 如何進(jìn)行調(diào)試呢 ? 接下來就是介紹 一個調(diào)試的工具 mobdebug
從下面的地址 直接拿到mobdebug 的源碼

https://gitee.com/mirrors_glycerine/MobDebug/blob/master/src/mobdebug.lua#

簡單的改改現(xiàn)在的代碼去試運(yùn)行



這里提示的就是說 找不到socke組建

3.1 下載socket 組件源碼

從這個地方下載一份最新的 luasocket 源碼,這個可以編譯一份可以用的 動態(tài)庫!

https://gitee.com/mirrors_addons/luasocket.git

3.2 編譯出來socket 庫

接下來就是對代碼進(jìn)行一定程序的改造
注意 我的編譯的過程中不是很順利 所以 我就直接自己寫了一個cmake 去用自己的方法編譯了!

git clone https://gitee.com/mirrors_addons/luasocket.git cd luasocket/ git checkout v3.0.0 mkdir build cd build/ cmake .. make -j

cmake 如下:

cmake_minimum_required(VERSION 3.1) project(luasocket C)# file(GLOB_RECURSE LUASOCKET_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.c") # file(GLOB_RECURSE LUASOCKET_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}"/src/*.h")add_library(socket SHARED ${CMAKE_CURRENT_SOURCE_DIR}/src/auxiliar.c ${CMAKE_CURRENT_SOURCE_DIR}/src/buffer.c ${CMAKE_CURRENT_SOURCE_DIR}/src/compat.c ${CMAKE_CURRENT_SOURCE_DIR}/src/except.c ${CMAKE_CURRENT_SOURCE_DIR}/src/inet.c ${CMAKE_CURRENT_SOURCE_DIR}/src/io.c ${CMAKE_CURRENT_SOURCE_DIR}/src/luasocket.c ${CMAKE_CURRENT_SOURCE_DIR}/src/mime.c ${CMAKE_CURRENT_SOURCE_DIR}/src/options.c ${CMAKE_CURRENT_SOURCE_DIR}/src/select.c ${CMAKE_CURRENT_SOURCE_DIR}/src/serial.c ${CMAKE_CURRENT_SOURCE_DIR}/src/tcp.c ${CMAKE_CURRENT_SOURCE_DIR}/src/timeout.c ${CMAKE_CURRENT_SOURCE_DIR}/src/udp.c ${CMAKE_CURRENT_SOURCE_DIR}/src/unix.c ${CMAKE_CURRENT_SOURCE_DIR}/src/unixdgram.c ${CMAKE_CURRENT_SOURCE_DIR}/src/unixstream.c ${CMAKE_CURRENT_SOURCE_DIR}/src/usocket.c ) set_target_properties(socket PROPERTIES PREFIX "") # 刪除前綴的 lib set_target_properties(socket PROPERTIES SUFFIX ".so") # 設(shè)置后綴 target_include_directories(socket PUBLIC/home/jeason/lua_debug/lua-5.4.4/src # 這里 根據(jù)實(shí)際需要進(jìn)行調(diào)整 ###### )

于是經(jīng)過一番的編譯之后 我就有了一個 socket.so 的動態(tài)庫

3.3 運(yùn)行起來mobdebug

將動態(tài)庫拷貝到和腳本同級的路徑下(當(dāng)然你也可以導(dǎo)出 環(huán)境變量)

cp socket.so ../../script/

再次運(yùn)行 發(fā)現(xiàn)了 找不到一個luaopen_socket 的函數(shù),這個是因?yàn)?我們的socket.so 并不是一個真正的 lua動態(tài)庫 ,這里其實(shí)是想找一個socket.lua的 lua 腳本 我們將腳本補(bǔ)充上去!

[jeason@centos7:~/lua_debug/script]$ ./lua test.lua ./lua: error loading module 'socket' from file './socket.so':./socket.so: undefined symbol: luaopen_socket stack traceback:[C]: in ?[C]: in function 'require'./mobdebug.lua:84: in main chunk[C]: in function 'require'test.lua:7: in main chunk[C]: in ? [jeason@centos7:~/lua_debug/script]$ ./lua test.lua


再次運(yùn)行:

此時 除了連接補(bǔ)上去 沒有報其他的錯誤了! 我們可以進(jìn)一步的準(zhǔn)備上位機(jī)的環(huán)境了

3.4 遠(yuǎn)程調(diào)試上位機(jī)的選擇

上位機(jī)這里我選擇的是 :zerobrane 他們的官網(wǎng)是這個

https://studio.zerobrane.com/


直接下載地址是這里 應(yīng)該可以直接用wget 工具拿到

https://download.zerobrane.com/ZeroBraneStudioEduPack-1.90-win32.exe

如果拿不到也可以去我的gitee 看一下 我應(yīng)該會隨著代碼一起放進(jìn)去的 。(這個軟件包下載起來速度很慢!)
軟件安裝好了應(yīng)該是這樣的, 接下來我們簡單的試一下調(diào)試


先將 test.lua手動的復(fù)制到 windows 的電腦上,然后開啟調(diào)試的服務(wù)器

在windows 上查看自己的內(nèi)網(wǎng)ip( 如果是其他環(huán)境 自己去決定自己的ip 吧 我的是 自己的服務(wù)器和電腦在一個內(nèi)網(wǎng)中 且能直連, 之前的測試中也嘗試過不同的 機(jī)器一起調(diào)試 使用的是 將本地的端口暴露到公網(wǎng)上 比較危險!)
win + R 彈出 運(yùn)行框,然后輸入 cmd 進(jìn)入命令行 再 輸入 ipconfig 查看自己的網(wǎng)絡(luò)信息

接下來修改自己服務(wù)器上的 腳本里面的ip

接下來 調(diào)用器服務(wù)器上的 腳本。

當(dāng) 你在windows 上的調(diào)試終端 出現(xiàn)了一個綠色的箭頭 并且指向了 你的 mobdebug 初始化之后的下一行 那么你的調(diào)試工作就可以開展了!

如果提示你 連接不上的話 建議查看 自己的防火墻,就是裝了調(diào)試終端的主機(jī)的防火墻。!

3.5 嘗試進(jìn)行命令行交互


linux 的服務(wù)器上 多了一行的打印

調(diào)試的終端 上的行號移動了一行

這里其實(shí)還有一個問題沒解決,就是文件的同步問題,顯然 我們希望的是能同步的進(jìn)行調(diào)試,如果要進(jìn)行 linux + windows 的聯(lián)合調(diào)試的話 我這邊想到了以下的幾種方案:

  • linux 端實(shí)現(xiàn) samba 服務(wù),然后windows 掛載 linux 的磁盤 直接打開對應(yīng)的文件 修改完 之后直接在服務(wù)器上 調(diào)用起來 這邊就可以調(diào)試了。
  • 在windows 安裝sftp 工具,每次修改完之后 直接將改動內(nèi)容發(fā)送到服務(wù)器。
  • 直接在服務(wù)器上裝 linux 版本的調(diào)試工具,調(diào)試完 直接服務(wù)器本地調(diào)試,當(dāng)然這個需要你有服務(wù)器的root 的權(quán)限 然后裝rdp 登錄圖形界面 或者其他的解決方案,可操作性不是很強(qiáng)。
  • 我這邊比較傾向于使用samba的方案,可操作性性比較強(qiáng),安裝簡單,即便是嵌入式的設(shè)備也可以安裝 一個裁剪之后的samba 服務(wù)。

    總結(jié)

    以上是生活随笔為你收集整理的lua学习笔记(4)-- 搭建mobdebug 远程开发环境的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。