2016-10-06 15 views
2

私は従来のC++コードを使用して戦争ゲームプロジェクトに取り組んでいます。攻撃は、「極端な場合」(例えば、1つのゲーム「タイル」内の戦闘で3つの連隊のグループで5000個の矢が発射され、そのうちの1つが〜5000の潜在的な " 1回のゲームターンの間にヒットする)。私の仕事は、ゲームターン中に起こっていることに関するデータを照合することです。Visual Studio 2015 C++プロジェクトでデバッグ中に変数値の変更をCSVファイルに記録する方法は?

火の中にあるユニットの1つのゲームターン中に、特定のローカル変数の値がどのように変化するかを記録する必要があります(1つのタイルの連隊だけが攻撃を受けている「テストシナリオ」に制限されます) 。デバッグセッションの開始時に

私のVisual Studioの「ウォッチウィンドウは、」このような程度になります。この平均は何

Name----------------------Value------------Type 
targ-----------------------011-------------short 
(gUnit[011]).damage--------0---------------short 
(gUnit[047]).damage--------0---------------short 
(gUnit[256]).damage--------0---------------short 

:最初のブレークポイントで、連隊は、ネストされた配列で表さgUnit [011] )「ヒット」のためのターゲット(「TARG」)、このヒットする前に、その連隊のための「ダメージ」であると判断されたこれに変更される可能性があり、その= 0

つのループの後である:

Name----------------------Value------------Type 
targ-----------------------256-------------short 
(gUnit[011]).damage--------3---------------short 
(gUnit[047]).damage--------0---------------short 
(gUnit[256]).damage--------0---------------short 

これは、1つの「ヒット」後に連隊011が3点のダメージを受けたことを示し、その後、次のヒットが発生したと判断された連隊047が対象となります。したがって、コールループの各サイクルでは、潜在的なターゲットのいずれかがターゲットとして再割り当てされ、「ダメージ」の値が変更される可能性があります。 5000個の矢が発射されたこの例では、5000回のヒットが可能です(ただし、多くのショットが発砲された場合、1300ヒットを超える可能性は低いです)。 1ゲームターンのスパンで発生する各ヒットのために、私は記録する必要がある: ターゲットとダメージ

私は、ブレークポイントを設定していると私は手動意味何をする必要があるか行うことができます。

  1. ヒットを決定する関数への最初の呼び出し["MissileHit()"]

  2. また、(gUnit [011])の値が0から3に変化したことに注意してください。 ID「011」の連隊は「3」のダメージを受けている。 。 。 */

  3. 実験ONEを繰り返し5000回(各ループTARGとタイルに攻撃を受けている単位を表す3つの配列のいずれかに変更することができる、と指摘した。

  4. 繰り返しを別の相試験のいずれかの(わずかに異なる条件で)7つの実験。

  5. 繰り返し試験の多分3又は4以上の相のため。要するに。

、少なくとも有する数千行2列: targ .......ダメージ

(このメモは、このCSVによって各テストサイクルの後に追加の列が挿入されるため、最終的なスプレッドシートは次のようになります。 atkrID ....地形.... atkrExpr .... atkrFatig .... targID ....targDamage

このすべてのデータ収集ビーイングの最終結果:記述統計は、攻撃の成果を仲介する様々なゲーム内の変数に基づいて計算することができます)これを行うことは明らか

は、「手動」とんでもないだろう。

私のためにこのデータを記録するcsvファイルをVisual Studioに生成させる簡単な方法はありますか?

私は、これらのブレークポイントが実行されたときに実行するスクリプトを作成し、ファイルにfstreamingすることができます。しかし、私はまだ耳を濡らしています(Visual Studio、C++、そして一般的な開発の両方で)!Visual Studioの機能が組み込まれているかどうか尋ねる価値はあると思いました。

+0

内蔵していますが、(https://msdn.microsoft.com/en-us/library/dn919654.aspx)[プラグインを構築するためにVisual Studioの拡張APIを]使用することができません。それでも(.NET言語の1つで)多くの作業が必要ですが、少なくともコードベースをデバッグコードで汚染することはありません。私は、ほとんどのAAAラベルにエンジンの埋め込み(もちろんCSVではなくより複雑なフォーマット)のようなロギングシステムがあり、通常はゲームエディタ(アーティストがシーン/レベル/地形を構築するために使用するソフトウェア等)を記録したり、機能を記録し再生することができます。 – Drop

+0

ありがとうございました!私はそれを見ていきます。 –

+0

@DicheBach、VSの拡張機能を使用したDropよりも良い提案はありませんが、変更された値を出力するのが難しい場合でもデータブレークポイントとトレースポイントを使ってデバッグ中に変数のすべての値を出力できる回避策があります少なくとも、CSVファイルで分析するのは簡単です。 http://stackoverflow.com/questions/39789974/visual-studio-debug-how-to-save-to-a-file-all-the-values-a-variable-has-had-du –

答えて

1

私はDropのコメントのようなVS拡張機能がこの問題のより良いパスになると思うが、私はそれが高い拡張知識を必要とすると思うので、この問題の別の回避策を提供するだけだ:データブレークポイントを追加し、ファイルに値をコピーして渡す必要がある場合でも出力ウィンドウに表示されますが、デバッグ中に値を分析することも便利だと思います。

Visual Studio. Debug. How to save to a file all the values a variable has had during the duration of a run?

+0

ありがとうジャック!私はそれが私が探していたものだと信じています:) –

+0

@ Diche Bach、もしそうなら、それは答えとしてマークしてください、それは同じ問題を抱える他のメンバーのために役立つでしょう。良い一日を:) –

関連する問題