リアルタイムデバッグ手法


18

変数を微調整し、数分かかるコードをコンパイルし、コードを実行し、微調整が間違った方向にあることを認識し、プロセスを繰り返し実行するルーチンとはまったく異なります。

セッションの進行中にゲームロジックとの対話を開始したいと思います。これをどのように処理しましたか?

iOS、C / C ++、およびC#/ XNAのソリューションを聞くことができます。

回答:



4

完全に解釈された言語を統合すると、ゲーム要素を非常に、非常に簡単にその場で書き直すことができます。

Python、Luaなどはすべて、このために明示的に利用できます。Angel Engineはおそらく一例になります。

ホットローディングは、チェックアウトする別の要素です(基本的に、アセットが変更されたことを通知するイベントが発生します-構成ファイル、アート要素など-そして、それを変更する一連のコンディショナーを介して実行します既存のものを新しいものに置き換える前の最終フォーマット。

ホットローディングを使用するラピッドプロトタイピングエンジンを使用してきましたが、それは喜びでした。


2

XNAを使用したC ++、C#、およびC#に関する限り、Visual Studioには優れたデバッグツールがあります。コードの任意の時点でアプリケーションをリアルタイムで一時停止し、いつでも変数に割り当てられた値を確認し、関数呼び出しをステップスルーします、コールスタックの分析など。さらに、PixやCLR Profilerなどのツールは、DirectX(Pix)およびCLRベースの言語(CLR Profiler)での開発を素晴らしいものにします。

さらに、ゲームでの作業で特に役立つ部分の1つは、デバッグテキスト、グラフィックスなどを書き込むためのこの巨大な領域があることです。メモリ使用量、描画されるオブジェクト/頂点の数、フレームレートなどのリアルタイムグラフは、画面に描画する一般的なものです。


1
VSは優れた開発ツールですが、通常のデバッグには時間がかかります。ブレークポイントの探索、コードのステップ実行、変数の変更、フローの再開などです。この質問は、インターフェイスコンポーネントを移動したり、ボスの攻撃率を微調整したりすることなどをすぐに行う方法を探しています。
David McGraw

2

C / C ++での簡単なトリックは、調整可能変数を静的変数に入れ、ブレークポイントをトリガーし、デバッガーで静的変数を変更し、終了するまで持続することです。


ただし、関数内で静的変数にします。グローバルスタティックの場合、Visual Studioはその価値を示すことができない可能性があります。
カイ

2

HTTPロギングは大きな助けであり、起動して実行するのは難しくありません。Google App Engineを使用して、これをすばやく実行することもできます。データは常に役立ちます。

スクリプトとXMLは、オンザフライでリロードでき、リセットする必要はありません。ゲームをダウンさせることなく失敗させます。これは、アーティスト、テスター、デザイナーに多くの力を与えます。

ゲーム内デバッグメニューシンプルなゲームデバッグメニューで、子供としてスポーンし、エンジンスライダーとゲームスライダーの両方でゲームをフリーズできます。実行時にキー番号を微調整し、1つまたは2つのデバッグ機能または情報ダンプを実行できます。

Davidの答えで述べたように、ASYNCソケットも大好きです。

使いやすいゲームチームは、これらのツールに追加して非常に簡単に使用できるようにする必要があります。そうしないと、使用できなくなります。


2

ショーンジェームスが既に言っていることを知ってます。しかし、真剣に、Visual Studio(具体的にはデバッグツール)はこれに最適です。

私は最近C ++をあまり使用していないので、これらがそこでどれだけうまく適用されるかはわかりません。ただし、C#(C#Expressを含む)には次のものがあります。

そして、これはあなたの心を吹き飛ばすかもしれません(私がそれについて知ったとき、それは私のものを吹き飛ばしました):

イミディエイトウィンドウは、実際には見つけるのが困難です([デバッグ/ Windows]メニューにあります)。

Visual C#デバッガーを使用することの唯一の大きな欠点は、const値を変更するのが好きではないことです。そのため、通常は、ゲームプレイに関連する値staticを調整しながら作成します。

(また、2台のモニターを使用すると非常に役立ちます。)


ここで、上記の方法にはアプリケーションの一時停止が含まれることを認める必要があります。これは、いくつかの特に厄介なことに満足できないほど遅い場合があります。

これらのまれな機会に、私が行うことは(XNAで)少しコードをハックして(おそらく上記のようにEdit and Continueを使用して)つかみKeyboard.GetState().IsKeyDown()(実際には、このために入力しやすいラッパーがあります)、調整しますキーストロークによる値。もっと複雑なものは努力する価値はありません。


実際に私が通常非常に重要だと感じるのは、リアルタイムで値を(変更するのではなく)視覚化できることです。このために、フレームの最後に描画される行とテキストをバッファリングできる素敵な小さなクラスがあります。また、迅速なプロトタイピングにも役立ちます。

(そして、もう一度、実行時にこれらの視覚化を「編集して続行」できることは素晴らしいことです。)


(ソース:andrewrussell.net
ここから

私は、現時点では(おそらく後で)公開する「いい」ソースを持っていないのではないかと心配しています。ただし、基本的には(このラウンドラインライブラリのと(XNAの組み込みSpriteBatchの)文字列のリストにすぎません。ただ、それを作るpublic staticのどこかに、適切なですべてを描き、すべてが「ワールドスペース」で表示されるように変換(その後、次のフレームのリストをクリアします)。


1

C / C ++用の単純なリフレクションシステムを作成するのは簡単です。このようにして、ゲーム内のすべての変数(ネットワークツール、キーボード、またはジョイパッドを使用)を参照し、心のコンテンツに変更できます。私にとってはうまくいきますが、上記の答えはすべて有効です。

追加して編集:このスレッドは、スレッドタイトルごとのデバッグではなく、調整に関するものです。


0

複数のスタジオで見た解決策の1つは、ネットワークを使用してプログラムに接続する外部デバッグアプリです。このアプリは特定の公開された変数を表示し、それらをリアルタイムで編集できます。新しい変数を追加するには、ゲームコードにいくつかのマクロを追加します。

ゲーム側マクロ、サーバー/クライアントプロトコル(XMLを前後にシリアル化するだけで見たソリューション)、およびクライアントの記述の初期設定は大規模です。ただし、特に通信にネットワークを使用すると、任意のプラットフォームで作業できるため、非常に便利です。


0

変数のロードと読み取りをテキストファイルにバインドし、コンソールから特定のキーバインディングまたはコマンドを使用して起動します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.