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

 http://www.unknownworlds.com/decodahtml

 

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

  

Decoda Tutorial 1:從Decoda啓動宿主程序調試lua
我從Decoda剛發佈就一直關注着,這個工具能夠注入到宿主程序內對lua腳本進行調試,還能夠設置斷點觀察變量的值,功能很是強大。 網絡

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

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

調試使用lua的宿主程序有兩種啓動方式,一種是從Decoda啓動宿主程序,另外一種是先啓動宿主程序而後用decoda注入。 google

本篇文章將介紹如何從Decoda啓動宿主程序 人工智能

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

 image

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

 image

如今你能夠在這個init.lua裏面設置斷點了,在disable_lua = true; do return end;這一句下斷點,聰明人都看得出來,只能在這裏下斷點,由於下面的語句都是不會執行的,除非將這一句註釋。選擇Debug菜單中的Stop Debugging退出調試,而後再選擇Start Debugging從新啓動調試,此時程序就會斷點到你設置斷點的這一行。 .net

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

相關文章
相關標籤/搜索