Decoda Tutorial LUA調式器 強大的lua調試工具


 http://www.unknownworlds.com/decoda

 

今天項目組的同事提起來要整個調式lua的工具,由於近期項目中用到lua的腳本日趨增長,導致腳本出問題的幾率也日益增加~~ 。調試起來也不是特別方便,所以有必要整一個。於是就先找到了一個調式器,暫時可以滿足項目的需求。下面先轉帖一下網上一位朋友寫的軟件使用幫助,感謝!

  

Decoda Tutorial 1:從Decoda啟動宿主程序調試lua
我從Decoda剛發布就一直關注着,這個工具可以注入到宿主程序內對lua腳本進行調試,還可以設置斷點觀察變量的值,功能非常強大。

下面我介紹一下使用方法。

首先找到一個使用了lua的程序,我這里用wireshark舉例,這是個很好很強大的網絡截包工具,wireshark內部使用了lua。沒有wireshark的請下去google一下並下載安裝,此為開源軟件。

調試使用lua的宿主程序有兩種啟動方式,一種是從Decoda啟動宿主程序,另一種是先啟動宿主程序然后用decoda注入。

本篇文章將介紹如何從Decoda啟動宿主程序

啟動Decoda並點擊Debug目錄下的StartDebuging,彈出一個工程設置對話框,點擊對話框里的第一行的Command右邊的按鈕,然后找到你的wireshark.exe可執行文件,點擊OK。

 image

此時wireshark程序開始執行,稍等一會在左邊的窗口中會出現一個init.lua文件,這就是這個wireshark使用的lua文件。(decoda可以檢測程序使用的所有lua文件並將他們顯示在左邊的窗口中)

 image

現在你可以在這個init.lua里面設置斷點了,在disable_lua = true; do return end;這一句下斷點,聰明人都看得出來,只能在這里下斷點,因為下面的語句都是不會執行的,除非將這一句注釋。選擇Debug菜單中的Stop Debugging退出調試,然后再選擇Start Debugging重新啟動調試,此時程序就會斷點到你設置斷點的這一行。

image  

整個流程就是這樣,你可以在Watch里面輸入要監視的變量,這些操作都和visual studio中一樣。

Decoda Tutorial 1:從Decoda啟動宿主程序調試lua
我從Decoda剛發布就一直關注着,這個工具可以注入到宿主程序內對lua腳本進行調試,還可以設置斷點觀察變量的值,功能非常強大。

下面我介紹一下使用方法。

首先找到一個使用了lua的程序,我這里用wireshark舉例,這是個很好很強大的網絡截包工具,wireshark內部使用了lua。沒有wireshark的請下去google一下並下載安裝,此為開源軟件。

調試使用lua的宿主程序有兩種啟動方式,一種是從Decoda啟動宿主程序,另一種是先啟動宿主程序然后用decoda注入。

本篇文章將介紹如何從Decoda啟動宿主程序

啟動Decoda並點擊Debug目錄下的StartDebuging,彈出一個工程設置對話框,點擊對話框里的第一行的Command右邊的按鈕,然后找到你的wireshark.exe可執行文件,點擊OK。

 image

此時wireshark程序開始執行,稍等一會在左邊的窗口中會出現一個init.lua文件,這就是這個wireshark使用的lua文件。(decoda可以檢測程序使用的所有lua文件並將他們顯示在左邊的窗口中)

 image

現在你可以在這個init.lua里面設置斷點了,在disable_lua = true; do return end;這一句下斷點,聰明人都看得出來,只能在這里下斷點,因為下面的語句都是不會執行的,除非將這一句注釋。選擇Debug菜單中的Stop Debugging退出調試,然后再選擇Start Debugging重新啟動調試,此時程序就會斷點到你設置斷點的這一行。

 image

整個流程就是這樣,你可以在Watch里面輸入要監視的變量,這些操作都和visual studio中一樣。   

 

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

上一篇文章介紹了從Decoda中啟動宿主程序來調試Lua的方法,這種方法唯一的缺點是你無法在visual studio中調試宿主程序。我們經常可能會碰到宿主程序和腳本我們都想調試的情況,用上一個Tutorial的方法是肯定不行的了。這次將介紹對已經啟動的宿主程序用Decoda注入的調試方法,這樣我們就可以在Visual Studio中調試宿主程序后用Decoda再注入宿主程序來調試Lua腳本。(宿主程序在被調試的情況下是不能注入的,必須在宿主程序執行的情況下注入,否則Visual Studio和Decoda都會死掉)

上次我們用的wireshark軟件做的演示,這個軟件在啟動的時候通過調用一個init.lua進行一些初始化操作。現在我們需要一個運行后並不立即執行Lua腳本,而是手動操作后再執行lua腳本的程序,這樣子我就可以先讓程序啟動,然后注入decoda的調試dll文件到宿主程序中來調試lua腳本。

找一個現成的程序的話實在太麻煩了,我就自己寫了一個超簡單的程序,代碼如下,宿主程序:main.cpp,腳本:add.lua,

file:main.cpp

extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}

#include <stdio.h>
#include <conio.h>
using namespace std;

int main()
{
    lua_State *L = lua_open();    //初始化lua
    luaL_openlibs(L);    //載入所有lua標准庫

    printf( "Press any key to run lua file./n");
    getch();

    luaL_dofile(L, "add.lua");  //執行add.lua,將add函數加入lua_State棧中

    lua_getglobal(L, "add");    //通過函數名取出函數地址壓入棧

    lua_pushnumber(L, 10);      //將第一個參數壓入棧

    lua_pushnumber(L, 10);      //將第二個參數壓入棧

    lua_call(L, 2, 1);          //調用add函數

    int sum = (int)lua_tonumber(L, -1);    //從lua_State棧中取出函數執行結果

    lua_pop(L, 1);      //將結果彈出棧

    printf( "The sum is %d/n", sum );
    getch();

    return 1;
}

file : add.lua

function add ( x, y )
    return x + y
end

 

如果您不是程序員不會編譯那也沒關系 ,我已經把編譯好的可執行文件和lua腳本上傳到skydrive了,需要的可以去下載,鏈接在此:DecodaTutorial2_demo

好,准備工作完成,執行解壓出來的test.exe文件,程序停在此處,此時千萬不要傻傻的去press any key哦!因為這時我們還沒將Decoda注入到此程序中呢,我們要做的是等待Decoda注入后執行add.lua腳本來進行調試。

image

那么現在運行Decoda吧,選擇Debug->Processes選項

image

彈出了一個對話框,這個對話框列出了當前系統的所有進程,選中我們的test.exe進程,然后對着Attach按鈕狠狠的按下去吧

image

好了,如果RP(人品)正常的話你應該看到左下角的Output出現如下信息,表示我們注入成功了。

image

現在我們知道我們要執行的add.lua腳本,所以我們可以在Decoda中直接找到並打開此腳本文件,如果我們不知道的話可以先讓程序執行一遍,程序執行結束后在Decoda左側的窗口中會列出程序執行過的所有lua文件。我在三行代碼都下了斷點,原因是宿主程序在luaL_dofile的時候會斷一次,調用add函數的時候會直接斷到函數的起始代碼處,我們可以從黃色箭頭出現在代碼行中的順序觀察到。

image 

好了現在我們可以Press any key讓我們的test.exe去執行add.lua腳本了!

當你press any key后,你會發現Decoda斷點到了end這行,我們單步執行,他又到了function add(x,y)這行,再單步執行來到end這行。下一個單步執行就會到了return x+y這行,這時就是宿主程序調用add函數的時候

  lua_call(L, 2, 1);          //調用add函數

這時我們可以查看lua腳本中x變量和y變量的值,找到Watch窗口,雙擊Name列的空白處,輸入變量名x然后回車,OK,你看到了你x變量的值和類型。

image 

按F5結束調試,讓test.exe恢復執行。好了,整個流程結束。

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/cyblueboy83/archive/2010/01/01/5116140.aspx

再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://blog.csdn.net/jiangjunshow


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM