C++アプリケーションに埋め込まれたluaコードをどのようにデバッグしますか?埋め込みLuaのデバッグ
私が収集したことから、私は特別なIDEとリンクを特別なランタイム(ugh)で購入する必要があります。または、lua debug API呼び出しを使用して、ゲームエンジンにデバッグコンソールを構築する必要があります。
私は自分自身のデバッグコンソールの作成に傾いていますが、それは多くの作業のようです。私がゲームの他の部分を磨くのに費やす時間。
C++アプリケーションに埋め込まれたluaコードをどのようにデバッグしますか?埋め込みLuaのデバッグ
私が収集したことから、私は特別なIDEとリンクを特別なランタイム(ugh)で購入する必要があります。または、lua debug API呼び出しを使用して、ゲームエンジンにデバッグコンソールを構築する必要があります。
私は自分自身のデバッグコンソールの作成に傾いていますが、それは多くの作業のようです。私がゲームの他の部分を磨くのに費やす時間。
あなたが望むものの少なくとも一部を実行できるいくつかのツールがあります。私はVSプラグインへの参照を見てきましたが、LuaのWindows用のSciTEデバッガ拡張があり、ケプラープロジェクトのRemDebugとそのLuaEclipseがあります。
RemDebugは、Luaで書かれたCGIスクリプトをデバッグできるようにビルドされているため、必要なものを追跡している可能性があります。ターゲットスクリプトとコントローラの間に通信チャネルを提供するためにLuaSocketモジュールにアクセスする必要があり、他のいくつかのモジュールも必要です。
大きな問題は、ゲームエンジンがあなたのスクリプトの周りに置いたサンドボックスの中から任意のモジュールを読み込むことかもしれません。あなたがエンジンを何らかの支配力で持っているなら、大きな問題ではないでしょう。
Lightroomはプラグインのサンドボックス内にrequire
を公開していないなど、Adobe Lightroomプラグインの開発者はこれができません。
私には驚きましたが、Luaで作業するときにデバッガが必要であることはめったにありませんでした。私はさまざまなプロジェクトのためにいくつかの小さなアプリケーションを構築しており、完全なスタックバックトレースと時折のprint
コールの組み合わせが、最初にrequire "strict"
が阻止しなかったバグの位置をどれくらいうまく見つけることに驚いています。
WindowsとVSを使用している場合 - 私たちが使っているトリックは使えますか?
ファイルにluaコードをコピーします。次に、luaコードでデバッガのAPIを呼び出します(C++ではDebuggerBreak()
と思います - hereを参照)。ルアコードが実行されるとデバッガが起動し、ファイルを指定できるはずです。その後、通常どおりデバッグしますか?
これは問題の半分を解決します。私が実際にやりたいことは、行単位でluaコードを実行することです。あなたの解決策を理解しているなら、私はluaスクリプトのどの行でも壊れてしまいますが、私はC++デバッガにいます。どのように私はローカルのルア変数などを調べますか? –
私はこれを2つの部分で問題として見ています.1つは、これを行うためのデバッガー拡張機能を作成するのが難しい簡単な検査です。 2番目の方法は、ルア「エンジン」がこれらの値をどのように格納し、手動で、またはおそらくマクロを介して検査するかを決定することです。 –
DebuggerBreakの呼び出しは、.NET固有のものなので、どのように動作するのかわかりません。私は、CLRを対象とするフォークされたLuaでのみ動作すると仮定します。
標準のLuaを使用している場合は、lua関数呼び出しdebug.debug()を使用していくつかの面倒なデバッグ機能があります。それはあなたのコンソールにLuaを投げるので、コンソールからluaを実行している場合、対話的にluaコマンドを発行してあなたの現在の状態を調べることができます。 debug.debug()はあなたを現在のスタックフレームに入れません。そのため、debug.getlocal()を使用して変数の値を読み取る必要があります。
私は自分自身ではまだ試していませんが、実際には実行可能なデバッグコンソールを作っているとは思えません。 LuaはC++と同じくらい複雑な言語ではないことを覚えておいてください。これは、gdbのような実際のC++デバッガを作るよりも簡単です。
すでに似たようなことをしている人がたくさんいると思います。あなたが見ることができるコードがあります。 Hereは、luaでのみ記述されたCLIデバッガです。ただ1つのluaファイル。あなたのニーズに合わせて慎重に使用したり修正したりするべきではありません。
約Decoda ??それを使用する方法を説明するビデオがあり、組み込みのluaソースに対してはうまく動作します。 (私は幸せな顧客です)。それはかなり安いです。
私はDecodaを使用しており、とても満足しています。それはあなたのプロジェクトとシームレスに結びついており、セットアップは一切必要ありません。 DecodaとC++を使ってLuaを別のデバッガで同時にデバッグすることもできます。私の唯一の不満は、開発者(Unknown Worlds)が自分の手で優先順位の高いプロジェクト(Natural Selection 2)を持っていることです。 (私の問題はデコダのせいではないと判明した)。また、プロジェクトリストはツリービューをサポートしていないので、たくさんのファイルを取得すると1つの長いリストになります。 – Raptormeat
私のデバッガ:GRLD(グラフィカルなリモートLUAデバッガ)を使用することができます。 RemDebugのように、ソケット接続を使用しますが、RemDebugとは異なり、素晴らしいグラフィカルインターフェイスを備えています。ソースコードが提供されるので、どのプラットフォームでも動作させることができます。これは、標準のluaランタイムで動作します。非営利目的では無料です。
EDIT:申し訳ありませんが、私はウェブサイトを閉じる必要がありましたので、ソフトウェアはもうダウンロードできません。私が時間を見つけたら、後でオープンソースソフトウェアとしてリリースするかもしれません。
EDIT 2:更新されたリンクは、今、MITライセンス(オープンソース)あなたが既存のものの一つで始めたいこととして、独自のコンソールを記述する必要はありません
下のGitHubにホストされています。 RemDebugは既に提案されています。私はRemDebugをベースにしたデバッガであるMobDebugを開発してきましたが、多くの新機能とバグ修正があります。変更の詳細なリストはREADMEです。
スクリプトでデバッグを有効にするには、require('mobdebug').start()
(アプリケーションとデバッガサーバーを同じマシンで実行している場合)を追加するだけで簡単です。これは、localhost上のデフォルトポートで待機しているデバッガに接続しようとする必要があります。 MobDebugに含まれるコマンドラインインターフェイスを使用するか、MobDebugと統合されてデバッグ機能を提供するLua IDEであるZeroBrane Studioを使用することができます。 IDEはLove2d、Moai、その他のLuaエンジンのデバッグをサポートしていますので、あなたの設定にもうまくいくかもしれません。
RemDebuggerは、ほぼ私が探していたものです。それはそのままで使えるはずで、私にカスタマイズする良い基盤を与えてくれるはずです。 –