2013-09-08 14 views
6

私のC++アプリケーションの内部に埋め込まれたLua 5.2.2コードをどのようにデバッグできますか?組み込みのLua 5.2.2コードのデバッグ

私はすでにquestionを見ており、それに含まれるすべてのIDEは5.1以下を扱い、5.2.2でそれらを使用しようとするとクラッシュします。

答えて

5

あなたはinstructions for Lua 5.2 debuggingに従うことによってZeroBrane Studioを使用してアプリケーションをデバッグすることができるはずです。 Lua5.2に対してLuasocketをコンパイルする必要があることに注意してください。 (アプリケーションがLua5.1に対してコンパイルされたluasocketをロードし、Lua5.1 DLLをロードしたり、必要なシンボルを見つけられなかったためにクラッシュする可能性があります)

luasocketをコンパイルしたくない場合は、あなたはWindows/OSX/Linuxのバイナリをthis folder and its subfoldersから得ることができます。 Lua5.1に対してコンパイルされたluasocketを持つフォルダの前に、これらのライブラリがLUA_CPATHにあることを確認してください。

[チャットの議論に基づいて更新]複数のVMの問題を取得することができる理由は、あなたのアプリケーションは、おそらく静的Luaのインタプリタをコンパイルしていることです。 luasocketを(直接またはmobdebug経由で)ロードします。これはlua52.dllに対してコンパイルされ、インタプリタの別のコピーをロードします。これを避けるには、2つの選択肢があります:(1)luaインタープリタ自体をインクルードするのと同じ方法でluasocketをアプ​​リケーションにコンパイルします。アプリケーションをデバッグするためにmobdebug.luaファイルを1つだけ使用するか、(2)プロキシDLLを使用する以外は何も必要ありません。 lua52.dllのように見えますが、静的にコンパイルされたluaライブラリへの呼び出しを実際にプロキシして、複数のVMの問題を回避します。 proxy dllはLua 5.1用ですが、スクリプトを調整してLua 5.2で動作させることができます。 OPのに対応して

(あなたのインタプリタは、静的にコンパイルされていない場合はLuaのDLLあなたの負荷が異なってlua52.dllから命名されている場合、あなたはまだ2人の通訳を得ることができます。)

+0

それは私にとってはうまくいかなかった。 lua_callを呼び出すとすぐに私のプログラムがクラッシュします。これは私がやったことですが、私は私の.luaファイル 'package.path = package.pathのにこのコードを配置.. "C:/ZeroBraneStudio/lualibs/mobdebug/mobdebug.lua" package.cpath = package.cpath .. "C:/ ZeroBraneStudio/binに/ clibs52 /ソケット/?DLL" ( 'mobdebug')が必要です ')(開始と私が手にエラーが' PANICです:LuaのAPIへの呼び出しで保護されていないエラー(main.lua:3 :グローバルインデックスを作成しようとしました 'package'(nil値) ' – Caesar

+0

'グローバル 'パッケージ'(nil値)のインデックスを作成しようとしました:そう、あなたの環境の 'package'グローバルはどうなりましたか? –

+0

また、 '... clibs52/mime/?. dll'を' socket.lua'からロードすることができ、 'clibs52'からロードされていることを確認したい場合があります。トラブルシューティングの議論を[ZeroBrane Studio maillist](http://studio.zerobrane.com/community.html)に切り替える方が便利かもしれません。 –

3

はここにあなたが開くべきかだ、リクエストコメントC++からLuaの標準ライブラリ "ベース":あなたは置き換えることにより、一度にすべての標準ライブラリを開くことができます

#include "lua.hpp" 

//... 
int main() 
{ 
    lua_State* L = luaL_newstate(); 
    luaL_requiref(L, "base", luaopen_base, 0); 

    // ... 
    int error = luaL_loadfile(L, mainLua); 
    lua_call(L, 0, 0); 

    lua_close(L); 
} 

注:

luaL_requiref(L, "base", luaopen_base, 0); 

luaL_openlibs(L); 

Lua 5.2 reference manual Section 6にはこの情報があります。

+0

ありがとう、そのエラーのためのトリックをしたようだが、私は別のエラーがあるようです。 'PANIC:Lua APIの呼び出しで保護されていないエラーが発生しました(エラーロードモジュール 'socket.core' ファイル 'C:/ ZeroBraneStudio/bin/clibs52/socket \ core.dll'から: 指定されたモジュールが見つかりませんでした ) 「その場所を調べたところ、コピー&ペーストでそこにいることを伝えることができます。 – Caesar

+0

luaを組み込んだ実際のC/C++アプリケーションをデバッグしようとしていますか? – greatwolf

+0

私はこれを議論することができるように部屋を作った。私に参加してくださいhttp://chat.stackoverflow.com/rooms/37030/debugging-embedded-lua-5-2-2-code – Caesar