14

最近、NotchのLudumDareライブストリームを少し見ました。彼はゲームに取り組んでいる間、Eclipseのホットスワップ機能を広範囲に使用しています。(これは私が参照しているもののビデオですhttp://www.twitch.tv/notch/b/302823358?t=86m30s

C#とXNAでも同じことをしたいと思います。幸い、VisualStudioには編集と続行の機能があります。ただし、レンダリングコードを一時停止するのではなく、実行中に編集したいと思います。

Visual Studioをセットアップして同じことを行うことはできますか?のチェックボックスがあることに気づきましたBreak all processes when one process breaks。別のスレッドでレンダリングループを設定して、変更を加えている間もゲームがレンダリングを続けるようにすることは可能ですか?

4

5 に答える 5

16

更新:この回答はビデオとして利用できるようになりました。


私はこれを行う方法を見つけるのに苦労してきました。私はこれがあなたの正確な質問に答えないことを知っています。しかし、実際に探しているのは、ゼロ(またはほぼゼロ)の遅延でコードを変更できるワークフローです。VisualStudioだけで得られる最も近いものを見つけたと思います。(したがって、膨大なエンジニアリング作業を回避し、「異常な」プロジェクトに対処します)。

このワークフローを実現する方法は、考えてみれば、実際には驚くほど簡単です。

ショートカットキーを使用してください!

私が思いついた最初の方法は、ブレークポイントを設定する通常の編集と続行の方法を使用することです。キーボードを使用するだけで、これをかなり速く行うことができます。これは、ループで呼び出されるコードでのみ機能します(例:描画/更新)。変更するコードをクリックし、ブレークポイントを追加します(F9)。ブレークポイントはほぼすぐにヒットし、コードを変更し、ブレークポイントを削除して(F9)、コードを再実行します(F5)。

これはかなり良いです。左側の列にある比較的小さな「ブレークポイントの追加」ターゲットをヒットするために、マウスを使用する必要はありません。ただし、入力フォーカスは行の先頭に移動するため、編集を開始する前に、通常はマウスを再度使用して修正する必要があります。

もっと速いものが欲しい。だから私はより良い解決策を思いついた:

繰り返しますが、キーボードを使用します。++を押しCtrlて「すべてを解除」しますAltBreakこれにより、ブレークポイントの設定や変更するコードがループで実行されているかどうかを心配することなく、ほぼ瞬時にデバッガーに入ります。これにより、エディターウィンドウが変更され、実行が中断されたドキュメントにフォーカスが移りますが、[戻る]のCtrl[+]-を押すと、すぐに修正できます。

次に、編集を行い、を押すだけF5で実際の動作を確認できます。マウスを1回使用するだけで(またはまったく使用せずに)、最初に入力を開始する場所を選択できます。予想どおりです。

確かに、 Ctrl+ Alt+BreakCtrl+-は、非常に迅速に実行できるようにしたいことの恐ろしいキーの組み合わせです。そして、押すキーが1つしかない方がよいでしょう。

完全なVisualStudioを使用している場合は、おそらくそれをマクロまたはアドインに変換できます。Expressにはそれらがありません。そのため、キーバインディング(ツール、カスタマイズ、キーボードなど)を変更し、隣接する2つのキーにバインドして、すばやく連続して押すことができます。または、外部マクロユーティリティを使用します。

個人的には、マウスの予備のボタンに設定されたマクロによって、2つのキーの組み合わせが連続して押されるように設定しました(2つの間に遅延は必要ないようです)。私は通常同時にテキストを選択しているので、これはかなりうまく機能します。後でキーボードマクロも追加するかもしれません。

これまでのところ、この方法の2つの小さな落とし穴を特定しました。

  • アプリを再度実行すると、VisualStudioによってアプリにフォーカスが与えられます。それが焦点を合わせ続ければいいでしょう。マクロにマウスの左クリックを追加することは、コードをすばやく再編集するための部分的な解決策です。
  • 「NavigateBackwards」はテキストの選択を保持せず、キャレットの位置のみを保持します。
于 2012-04-17T13:35:20.427 に答える
7

私はあなたにその方法を教えることができますが、あなたはそれを気に入らないでしょう:

1) Visual Studioインスタンスでゲームの実行可能ファイルを実行します(game.exe- > vsInstanceA)

2)個別のビジュアルスタジオインスタンス( modizable.dll- > vsInstanceB)を使用して、変更可能なコードを個別のdllにコーディングします。

*これを行うと、modizable.dllをコンパイルできるため、コンパイル時のエラーチェックなどが行われることに注意してください。*

...そして今はそれがトリッキーになるところです...

3a) game.exeはmodizable.dllを参照する必要があります。 実際のdllである.vcprojではありません

3b)「マジックキー」を押したとき(game.exeにキーの押下を探しさせる)、game.exeにmodizable.dllをアンロードさせ、リロードさせます。これは、mscorlibで提供されるAssemblyクラスとAppDomainクラスを介して簡単に実行できます。もちろん、これは、game.exe内の依存システムをアンロードする必要があることを意味します。

この3b)セクションには多くの手振りがあります。これは非常に多くの作業ですが、非常に簡単です(Google検索の例:https://www.google.com/search?q = dynamic + load +dll+。ネット

...そしてその後、あなたは行ってもいいです...

3-alt) 3b)があなたに合わない場合は、他のいくつかの選択肢:

  • 「マジックキー」を押すと、msbuild.exeを呼び出してmodizable.dllを再構築できます
  • CDharpコンパイラdllを使用して、modizable.dll全体ではなく、各クラスを動的に再コンパイルできます

しかし残念ながら、私の10年以上の.net開発では、誰かがそれを行うためのサードパーティ製品を作成していない限り、これが唯一の方法です(つまり、彼らは私が言ったことをあなたのために行います)

于 2011-12-26T07:25:05.610 に答える
2

これはあなたが探しているものとは正確に一致しないかもしれませんが、私がやってきたことです。ゲームの実行中にブレークポイントをスローするだけです。停止したら、編集してブレークポイントを削除し、F5キーを押して続行できます。

ほとんどの場合、これにより、ゲームの実行中に物事を編集し、その後もゲームを実行し続けることができますが、すべてで機能するわけではありません。クラスレベルのものを追加または削除したり、関数全体またはパラメーターを追加/削除したりすることはできません。ほとんどの場合、これは、更新のたびにヒットする小さなものについて、さまざまな数値と方程式をテストするために行います。

于 2012-03-02T04:02:11.360 に答える
0

「実行を一時停止せずにVisualStudio2010で」という元の質問に答えるには、

いいえ。Javaの場合、これを可能にするJRebelがあります。

マイクロソフトがこれを行わなかった理由はすぐに想像できます。ある種の委員会や人々のグループが物事を設計している場合、この「動的なソフトウェア更新」/ホットスワップが機能しないという良い議論を思いつくのは1人でも簡単です。撃墜するのは簡単すぎます。または、彼らがそれを進める場合、彼らは複雑なオンラインシナリオにそれを使用したいので、どこにでも行くために多くのステップ、作業、および理解を必要とするいくつかのまったく新しい「エンタープライズフレームワーク」を介して行われます。

これを行うための簡単な方法があったらいいのにと思います。リスクを冒し、外部システムと通信するホットスワップサービスが必要な場合は、その複雑なフレームワークなどを使用する必要があるという多くの免責事項を提示します。

これを低リスクで安全に使用できる最も一般的なシナリオは、起動コストが高いか、エンジンで実行されているもの(ルールなど)にバグがある場合の動作を調査し、バグを示すために、ある種のエンジンのプロトタイプを作成して調整することです。 、多くのことが起こらなければならず、常にバグに遭遇するとは限らない可能性があります。これを使用すると、デバッグ時間を数週間節約できる場合があります。私の場合は、少なくともそうする必要があります。

于 2015-05-02T03:44:08.740 に答える
0

私は、IntelliJ Idea + DCEVM(動的コード進化VM)を使用してJavaで作業することに慣れています。

残念ながら、Microsoft C#プラットフォームでその構成に近づくものは見つかりませんでした。それは本当にひどいです、そしてあなたはそれについて多くをすることができません。一部のユーザー定義マクロを使用できますが、デバッグセッションを再起動せずに編集および続行モードで多くのことを実行することはできません。

ただし、可能であれば、DotnetWatchを使用して生産性を大幅に向上させる最新の.NETCoreを使用してみてください。それでもDCEVMほど高速ではありませんが、従来のVS+.NETホットリロードエクスペリエンスよりもはるかに優れています。詳細はこちら

于 2017-02-23T15:48:24.847 に答える