10

これは私がおそらく可能だと知っていることですが、
VS2005(C ++)では、デバッグ中に、デバッグ中のコードから関数を呼び出すことができませんでした。
この機能は、ウォッチ ウィンドウの通常の機能だけでは簡単に調べられない複雑なデータ構造をデバッグするときに不可欠な場合があります。
ウォッチ ウィンドウでは関数呼び出しを記述できるようですが、試行するたびに何らかのエラーが発生します。

Error: symbol "func" not found
Error: argument list does not match function
Error: member function not present

これを適切に機能させることに成功した人はいますか? ここで何が欠けていますか?

編集:明らかに、呼び出される関数は、デバッガーが存在する現在のスコープに存在するシンボルでなければなりません。

4

7 に答える 7

11

わかりました
。CXX0040 は " " を意味します。CXX0047 は " The C expression evaluator does not support implicit conversions involving constructor calls."を
意味します。Overloaded functions can be called only if there is an exact parameter match or a match that does not require the construction of an object.

つまり、関数を呼び出したい場合、どの引数も暗黙的な変換を持つべきではなく、どの引数も構築を必要としないということです。
このコンテキストでの「暗黙的な変換」には、への変換などの些細なことも含まれているよう'String'です'const String&'
「構築」には、些細なコピー構築が含まれているようです。したがって、プリミティブ型ではないものを値で渡すと、エラーが発生します。

したがって、これは基本的に、プリミティブ型またはポインターのみを取る関数を残します。
私はこの理論をうまくテストしました。

したがって、ウォッチ ウィンドウからメソッドを呼び出せるようにする場合は、ポインターとプリミティブのみを受け取るオーバーロードを追加し、ウォッチ ウィンドウで引数を適切に渡します。プリミティブでないオブジェクトを渡すには、そのアドレスを渡します。

于 2008-11-07T02:45:18.843 に答える
0

必要なのは「即時」ウィンドウです。また、現在のブレークポイントがある場所から見えるものに制限されます。ローカル変数、およびそのクラス(またはグローバル)の関数

于 2008-11-07T03:55:02.260 に答える
0

ウォッチ ウィンドウは、現在のコードが存在するコンテキストによって制限されます。たとえば、コードが関数に入り、現在の関数のスコープから隠されている別の関数にアクセスしようとすると、機能しません。

ウォッチ ウィンドウで関数を呼び出す場合は、それが表示され、現在のスコープからアクセスできることを確認してください。

于 2008-11-07T02:21:42.603 に答える
0

私の知る限り、アンマネージ C++ のデバッグ中に [ウォッチ] ウィンドウからコードを実行することはできません。これは C# で動作します (おそらく VB.NET とマネージ C++ でも、私はそれについて肯定的ではありません)。一部の言語では機能するが、他の言語では機能しないため、許可される可能性があります。

于 2008-11-07T02:22:29.140 に答える
0

これは非常にヒットとミスの方法で機能することがわかります。一部の非常に単純な関数 (メンバー関数を含む) は動作しますが、通常は単純なプロパティ ゲッターです。他のより複雑な関数は機能せず、エラーが発生します。

正確なルールを見分けることはできませんでした...

于 2008-11-07T02:34:43.607 に答える
0

私はこれをテストしていませんが、それが即時ウィンドウの目的であると常に思っていました(コードの実行)

キャメロン

于 2008-11-07T03:23:21.013 に答える
0

私の経験では、即時ウィンドウにはいくつかの欠点があります。クラスが別の DLL からのものである場合、クラスのメンバー関数を呼び出すことはできませんが、誤解を招くエラー メッセージが表示されます。何かが同じ DLL 内にある場合 (たとえば、他のすべてのものを静的にリンクすることによって)、メンバーの呼び出しはかなり信頼できます。しかし、他の人が述べたように、複雑なものは機能する場合と機能しない場合があります。

于 2008-11-07T08:55:04.743 に答える