426

次の関数を使用します。

DataTable go() {
    return someTableAdapter.getSomeData();
}

この関数にブレークポイントを設定すると、戻り値を検査する可能性はありますか? go()ページ内のデータグリッドに直接結合されてい.aspxます。

返されたデータテーブルを検査する唯一の方法は、一時変数を使用することです。ただし、それは少し不便です。別の方法はありませんか?

4

21 に答える 21

301

私が知っていることではありません。変数を追加すると、とにかくリリースビルドでコンパイラによって削除されることに注意してください...

更新: この機能は VS2013 に追加されました。autos ウィンドウで戻り値を確認したり$ReturnValue、watch/immediate ウィンドウで使用したりできます。

値は、関数から戻った直後にしか見ることができないため、最も簡単なアクセス方法は、関数呼び出しにブレークポイントを設定し、呼び出しをステップ オーバー (F10) することです。


VS2015 の更新: ブー!
残念ながら、VS2015 (devenv v14) Update for VS2017には含まれていないようです: 戻ってきました。(devenv v15)

于 2008-11-06T09:26:00.050 に答える
57

これは、カスタマー フィードバック サイトによると、 CLR 4.5.1 を使用する Visual Studio 2013 で実行できます。C# の以前のバージョンでは使用できませんでした。

(Visual Studio 2008 以前では VB.NET でサポートされていました。C/C++ 開発者は常に使用できます。)

于 2010-09-15T05:25:26.390 に答える
26

これは非常に便利なことだと思います。ステップ アウトする前にメソッドの戻り値を確認するだけでなく、ステップ オーバーしたメソッドの戻り値も確認できます。「 OzCode 」と呼ばれる Visual Studio の商用拡張機能の一部として実装しました。

これを使用すると、メソッドの戻り値をコード エディターで HUD ディスプレイのようなものとして表示できます。

ステートメントの視覚化

詳細については、こちらのビデオをご覧ください。

于 2011-11-18T09:49:26.257 に答える
23

Microsoftによると、これをマネージコードで確実に実装する方法はありません。これは、彼らが認識して取り組んでいる問題です。

ネイティブC++またはVB6コードのデバッグの経験がある人は、関数の戻り値が[自動]ウィンドウに表示される機能を使用したことがあるかもしれません。残念ながら、この機能はマネージコードには存在しません。戻り値をローカル変数に割り当てることでこの問題を回避できますが、コードを変更する必要があるため、これはそれほど便利ではありません。マネージコードでは、ステップオーバーした関数の戻り値を判断するのは非常に困難です。ここでは一貫して正しいことを行うことができないことに気付いたため、デバッガーで誤った結果を表示するのではなく、この機能を削除しました。ただし、これを元に戻したいと考えています。CLRチームとデバッガーチームは、この問題に対するいくつかの潜在的な解決策を検討しています。残念ながら、これはVisualStudio11の一部ではありません。

https://connect.microsoft.com/VisualStudio/feedback/details/597933/add-a-return-pseudo-variable-to-the-visual-studio-debugger-for-net-code

于 2012-06-17T14:33:15.523 に答える
22

Visual Studio 2015 について:

Marc Gravell による現在受け入れられている回答によると:

この機能は Visual Studio 2013 に追加されました。autos ウィンドウで戻り値を確認するか、ウォッチ/イミディエイト ウィンドウで $ReturnValue を使用できます。

その回答は、この機能は Visual Studio 2015 では機能しないとも述べています。これは (完全に) 真実ではありません。メソッド呼び出しの戻り値を調べるには、次の注意事項があります。

$ReturnValueが認識されるようにするには、従来の式エバリュエーターをオンにする必要があります([ツール]、[オプション]、[デバッグ]、[従来の C# および VB の式エバリュエーターを使用する] )。それ以外の場合は、$ReturnValue1を使用できます。

これを Visual Studio 2015 Enterprise でテストしました。

  • 従来の式エバリュエーターがオフの場合: $ReturnValue1のみ が機能します
  • 従来の式評価器がオンになっている場合: $ReturnValue$ReturnValue1の両方 が機能します
于 2016-03-18T10:01:58.750 に答える
13

メニューの[ツール] → [オプション] 、[IntelliTrace]に移動し、設定を変更してイベントと通話情報を収集する場合。

前の呼び出しイベント(Ctrl+ Shift+ F11)に戻り、autosウィンドウでメソッド呼び出しから返された一時的な値をメソッド名の子として確認できます。

これは、現在のメソッドの戻り値を示しているのではありません。現在のメソッドで最後に呼び出されたメソッドの戻り値を示しているだけです。

だから、それは大丈夫です

DataTable go(){return someTableAdapter.getSomeData();}

の戻り値が表示されsomeTableAdapter.getSomeData()ます。

しかし、そうではありません:

int go(){return 100 * 99;}
于 2011-03-29T13:18:58.680 に答える
12

.NET 以前の古いトリック: [レジスタ] ウィンドウを開き、EAX レジスタの値を確認します。これには、最後に呼び出された関数の戻り値が含まれます。

于 2012-10-30T04:06:04.877 に答える
11

Shift-F11 を使用して go() メソッドからステップ アウトすると、"Autos" デバッグ ウィンドウに、スタックからポップされたばかりのメソッド呼び出しの戻り値が表示されます (この場合、go() メソッドはあなたが欲しいもの)。これは Visual Studio 2005 での動作です。Visual Studio 2008 を使用したことがないため、そのバージョンで同じように動作するかどうかはわかりません。

于 2008-11-06T09:53:04.457 に答える
7

はい、とてもいい方法があります。重大な欠点の 1 つは、5 年、場合によっては 6 年待たなければならないことです。あなたが 2008 年 11 月に投稿したことがわかりました。

...ああああ。そしてほら!あなたのために、MS は最新のVisual Studio 2013をリリースしました。これは、デバッグ モードで実行しているときにメニューからアクセスできるデフォルトの機能です (メニューDebugWindowsAutos )。

于 2014-09-03T12:29:53.267 に答える
5

Examine return values of method calls に記載されていない隠し機能があるため、これを Visual Studio 2015 で動作させるための PascalK の回答を拡張したいと考えました。

関数呼び出しをネストしている場合、疑似変数$ResultValueXが自動的に作成されます。ここで、X は関数呼び出しの順序を示します。したがって、 などの呼び出しがある場合Multiply(Five(), Six())、次の疑似変数が作成されます。

Five()     | $ResultValue1 = 5
Six()      | $ResultValue2 = 6
Multiply() | $ResultValue3 = 30
于 2016-05-31T22:21:05.870 に答える
2

Microsoft Visual C ++はこれを行っていましたが、Visual StudioはAFAIKではありません.. :(

于 2010-06-16T10:52:41.840 に答える
2

私が知っている唯一の方法は、戻り行にブレークポイントを配置し、クイック ウォッチウィンドウを呼び出して、返された式を入力することです。

someTableAdapter.getSomeData();

ただし、これは、呼び出しがオブジェクトの状態を変更しない場合にのみ機能します (実行を再開するときに同じメソッドへの 2 回目の呼び出しがあるため)。

于 2009-01-19T06:00:28.160 に答える
1

フラグやその他の変数を設定せず、何かを返すだけの場合は、中間ウィンドウでも値を評価するように要求できます。

于 2008-11-06T09:42:39.547 に答える
1

Debug → Autos ウィンドウを開くと閉じます。実際の戻り値は表示されませんが、return ステートメントで評価されたものが表示されます。

于 2008-11-06T09:58:01.763 に答える
0

return式をウォッチウィンドウにドラッグアンドドロップします。

たとえば、ステートメントで

return someTableAdapter.getSomeData();

ドラッグアンドドロップ

someTableAdapter.getSomeData()

ウォッチウィンドウに入ると、値が表示されます。

これは、どの式に対しても実行できます。

于 2009-02-09T01:18:22.973 に答える
0

"someTableAdapter.getSomeData();"を選択して右クリックし、Quick Watchを選択してみてください。

于 2008-11-06T09:27:47.813 に答える