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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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

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

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

1.0 下載源碼

lua的源碼可以從以下的lua 官網下載

http://www.lua.org/

執行以下的指令可以編譯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 簡單的執行一下 看看效果

[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 . 簡單的認識一下lua的鉤子函數

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") -- 輸出結果如下: -- 1 -- 12 -- 123 -- 1234 -- 12345 -- 123456

加入鉤子函數之后的執行結果如下:

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

關于鉤子函數的調用方面,鉤子函數支持 三種事件
①行事件 , ② 函數進入事件 ③ 函數退出事件
我用的比較多的 是行事件,好像還有一種計數事件,我沒怎么用過 不是很了解 ,要想注冊這些事件 ,只需要在注冊鉤子的時候將第二個參數 的字符串內寫上對應的縮寫 l f r 分別對應上述的三種事件 ,如果要公式注冊上述的三個事件 那么代碼如下:

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 ... 函數事件 -- 1 -- my_hook enter ... 行事件 -- my_hook enter ... 函數事件 -- 12 -- my_hook enter ... 行事件 -- my_hook enter ... 函數事件 -- 123 -- my_hook enter ... 行事件 -- my_hook enter ... 函數事件 -- 1234 -- my_hook enter ... 行事件 -- my_hook enter ... 函數事件 -- 12345 -- my_hook enter ... 行事件 -- my_hook enter ... 函數事件 -- 123456 -- my_hook enter ... 行事件 -- my_hook enter ... 函數事件 -- my_hook enter ... 退出事件

3. 搭建lua 調試環境

通過上面 我們已經知道了 我們可以通過注冊鉤子函數監控代碼的執行過程。
那么 如何進行調試呢 ? 接下來就是介紹 一個調試的工具 mobdebug
從下面的地址 直接拿到mobdebug 的源碼

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

簡單的改改現在的代碼去試運行



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

3.1 下載socket 組件源碼

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

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

3.2 編譯出來socket 庫

接下來就是對代碼進行一定程序的改造
注意 我的編譯的過程中不是很順利 所以 我就直接自己寫了一個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") # 設置后綴 target_include_directories(socket PUBLIC/home/jeason/lua_debug/lua-5.4.4/src # 這里 根據實際需要進行調整 ###### )

于是經過一番的編譯之后 我就有了一個 socket.so 的動態庫

3.3 運行起來mobdebug

將動態庫拷貝到和腳本同級的路徑下(當然你也可以導出 環境變量)

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

再次運行 發現了 找不到一個luaopen_socket 的函數,這個是因為 我們的socket.so 并不是一個真正的 lua動態庫 ,這里其實是想找一個socket.lua的 lua 腳本 我們將腳本補充上去!

[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


再次運行:

此時 除了連接補上去 沒有報其他的錯誤了! 我們可以進一步的準備上位機的環境了

3.4 遠程調試上位機的選擇

上位機這里我選擇的是 :zerobrane 他們的官網是這個

https://studio.zerobrane.com/


直接下載地址是這里 應該可以直接用wget 工具拿到

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

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


先將 test.lua手動的復制到 windows 的電腦上,然后開啟調試的服務器

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

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

接下來 調用器服務器上的 腳本。

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

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

3.5 嘗試進行命令行交互


linux 的服務器上 多了一行的打印

調試的終端 上的行號移動了一行

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

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

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。