Visual Studio デバッガーには、 クイック ウォッチ ダイアログ ボックス、 ウォッチ ウィンドウ、または イミディエイト ウィンドウに式を入力するときに機能する式エバリュエーターが含まれています。 式エバリュエーターは、[ ブレークポイント ] ウィンドウやデバッガー内の他の多くの場所でも動作しています。
以降のセクションでは、Visual Studio でサポートされる言語の式評価の制限について説明します。
F# 式はサポートされていません
F# 式は認識されません。 F# コードをデバッグする場合は、式をデバッガー ウィンドウまたはダイアログ ボックスに入力する前に、式を C# 構文に変換する必要があります。 F# から C# に式を変換する場合は、C# で == 演算子を使用して等価性をテストし、F# では単一の =を使用することを忘れないでください。
C++ 式
C++ の式でコンテキスト演算子を使用する方法の詳細については、「 コンテキスト演算子 (C++)」を参照してください。
C++ でサポートされていない式
コンストラクター、デストラクター、変換
明示的または暗黙的に、オブジェクトのコンストラクターまたはデストラクターを呼び出すことはできません。 たとえば、次の式ではコンストラクターが明示的に呼び出され、エラー メッセージが表示されます。
my_date( 2, 3, 1985 )
変換先がクラスの場合、変換関数を呼び出すことはできません。 このような変換には、オブジェクトの構築が含まれます。 たとえば、myFractionが変換関数演算子CFractionを定義するFixedPointのインスタンスである場合、次の式はエラーになります。
(FixedPoint)myFraction
new 演算子または delete 演算子を呼び出すことはできません。 たとえば、次の式はサポートされていません。
new Date(2,3,1985)
プリプロセッサ マクロ
プリプロセッサ マクロはデバッガーではサポートされていません。 たとえば、定数VALUEが #define VALUE 3 として宣言されている場合、[VALUE] ウィンドウでを使用することはできません。 この制限を回避するには、可能な限り #defineを列挙型と関数に置き換える必要があります。
名前空間宣言の使用
using namespace宣言は使用できません。 現在の名前空間の外部にある型名または変数にアクセスするには、完全修飾名を使用する必要があります。
匿名名前空間
匿名名前空間はサポートされていません。 次のコードがある場合、ウォッチ ウィンドウに test を追加することはできません。
namespace mars
{
namespace
{
int test = 0;
}
}
int main()
{
// Adding a watch on test doesn't work.
mars::test++;
return 0;
}
デバッガーの組み込み関数を使用して状態を維持する
デバッガーの組み込み関数を使用すると、アプリケーションの状態を変更せずに、式で特定の C/C++ 関数を呼び出す方法が提供されます。
デバッガーの組み込み関数:
安全であることが保証されています。デバッガーの組み込み関数を実行しても、デバッグ中のプロセスが破損することはありません。
すべての式で許可されており、副作用や関数の評価が許可されないシナリオでも可能です。
ミニダンプのデバッグなど、通常の関数呼び出しができないシナリオで動作します。
デバッガーの組み込み関数は、式の評価をより便利にすることもできます。 たとえば、
strcmp(str, "asd")は、str[0] == 'a' && str[1] == 's' && str[2] == 'd'よりもブレークポイント条件で記述する方がはるかに簡単です。 )
| Area | 組み込み関数 |
|---|---|
| 文字列の長さ | strlen、wcslen、 strnlen、wcsnlen |
| 文字列の比較 | strcmp、wcscmp、 stricmp、wcsicmp、 _stricmp、_strcmpi、_wcsicmp、_wcscmpi、 strncmp、wcsncmp、 strnicmp、wcsnicmp、 _strnicmp、_wcsnicmp |
| 文字列検索 | strchr、wcschr、 memchr、wmemchr、 strstr、wcsstr |
| Win32 | CoDecodeProxy、 DecodePointer、 GetLastError、 TlsGetValue |
| Windows 8 |
RoInspectCapturedStackBackTrace、 WindowsCompareStringOrdinal、 WindowsGetStringLen、 WindowsGetStringRawBuffer これらの関数では、デバッグ中のプロセスが Windows 8 で実行されている必要があります。 Windows 8 デバイスから生成されたダンプ ファイルのデバッグには、Visual Studio コンピューターで Windows 8 が実行されている必要もあります。 ただし、Windows 8 デバイスをリモートでデバッグする場合は、Visual Studio コンピューターで Windows 7 を実行できます。 WindowsGetStringLen および WindowsGetStringRawBuffer は、ソース レベルの実行エンジン (EE) によってのみ使用されます。 |
| その他 |
__log2 - 指定した整数の対数底 2 を返します。最も近い下位整数に丸められます。 __findNonNull - ポインターの配列を検索し、最初の null 以外の要素のインデックスを返します。 - Parameters: (1) 配列内の最初の要素へのポインター (void*)、(2) 配列のサイズ (unsigned int)。 - 戻り値: (1) 配列内の最初の null 以外の要素の 0 から始まるインデックス、または見つからない場合は -1。 DecodeHString - HSTRING の値を書式設定するヘルパー関数。 HSTRING 値をスタックからポップし、文字列が配置されている場所を EE が判断するために使用できる StringInfo 構造体のバイトをプッシュします。 これは、EE によって内部でのみ使用されます。ユーザーが直接呼び出すことはできません。 DecodeWinRTRestrictedException - WinRT 制限付き例外をデコードして、制限された説明を取得します。 - パラメーター: (1) 制限付き参照文字列を表す null で終わる文字列の文字。 - 戻り値: 表示する実際のエラー メッセージを含む null で終わる文字列の文字。 DynamicCast - dynamic_castを実装します。 - パラメーター: (1) キャストするオブジェクトへのポインター。 - データ項目: CDynamicCastData オブジェクトは、対応する ExecuteIntrinsic() 命令にデータ項目として関連付ける必要があります。 データ項目は、変換元と変換先の型、そして natvis 式を評価しているかどうか(診断で無限再帰を回避するために必要)をエンコードします。 - 戻り値: (1) オブジェクトへのポインター、正しい型へのキャスト、またはキャストするオブジェクトが正しい型のインスタンスでない場合は NULL。 DynamicMemberLookup - クラス メンバーの値を動的に取得するヘルパー関数 GetEnvBlockLength - 環境ブロックの長さを文字で取得するヘルパー関数。 $envに使用されます。 Stdext_HashMap_Int_OperatorBracket_idx - stdext::hash_map の Operator[] です。 'int' のキーを持つ既定のハッシュ関数を想定します。 値を返します。 組み込み演算子[] は、ハッシュテーブルからの既存の項目の取得のみをサポートします。メモリ割り当てなどの不要な複雑さが伴う可能性があるため、テーブルへの新しい項目の挿入はサポートされません。 ただし、operator[] を使用して、テーブルに既に含まれているキーに関連付けられている値を変更できます。 - スタック パラメーター: (1) stdext::hash_map オブジェクトのアドレス、(2) テーブルへのキー (int)、(3) 関数の実装で参照を行う必要があるメンバーのフィールド オフセットを指定する HashMapPdb 構造体。 これは、シンボルへの直接アクセスがリモート側では使用できないために必要です。 - 戻り値: (1) キーがテーブル内にある場合、キーに対応する値のアドレス。 それ以外の場合は NULL。 Std_UnorderedMap_Int_OperatorBracket_idx - std::unordered_map は stdext::hash_map と同じように動作しますが、ハッシュ関数が異なる点が異なります。 ConcurrencyArray_OperatorBracket_idx // Concurrency::array<>::operator[index<>] と operator(index<>) を使用します ConcurrencyArray_OperatorBracket_int // Concurrency::array<>::operator(int, int, ...) ConcurrencyArray_OperatorBracket_tidx Concurrency::array<>::operator[tiled_index<>] と operator(tiled_index<>) ConcurrencyArrayView_OperatorBracket_idx // Concurrency::array_view<>::operator[index<>] と operator(index<>) ConcurrencyArrayView_OperatorBracket_int // Concurrency::array_view<>::operator(int, int, ...) ConcurrencyArrayView_OperatorBracket_tidx // Concurrency::array_view<>::operator[tiled_index<>] と operator(tiled_index<>) TreeTraverse_Init - 新しいツリー トラバーサルを初期化します。 拡張機能ベースのビジュアライザーをサポートします。 .natvis ファイルで使用することを意図していません。 TreeTraverse_Next - 保留中のツリー トラバーサルからノードを取得します。 拡張機能ベースのビジュアライザーをサポートします。 .natvis ファイルで使用することを意図していません。 TreeTraverse_Skip - 保留中のツリー トラバーサル内のノードをスキップします。 拡張機能ベースのビジュアライザーをサポートします。 .natvis ファイルで使用することを意図していません。 |
C++/CLI - サポートされていない式
ポインターまたはユーザー定義キャストを含むキャストはサポートされていません。
オブジェクトの比較と割り当てはサポートされていません。
オーバーロードされた演算子とオーバーロードされた関数はサポートされていません。
ボックス化とボックス化解除はサポートされていません。
Sizeof演算子はサポートされていません。
C# - サポートされていない式
動的オブジェクト
デバッガー式の中で、動的に型指定された変数を使用することができますが、それらは静的型として取り扱われます。 IDynamicMetaObjectProviderを実装するオブジェクトがウォッチ ウィンドウで評価されると、動的ビュー ノードが追加されます。 [動的ビュー] ノードにはオブジェクト メンバーが表示されますが、メンバーの値の編集は許可されません。
動的オブジェクトの次の機能はサポートされていません。
複合演算子
+=、-=、%=、/=、および*=数値キャストや型引数キャストなど、多くのキャスト
2 つ以上の引数を持つメソッド呼び出し
2 つ以上の引数を持つプロパティゲッター
引数を持つプロパティ セッター
インデクサーへの割り当て
ブール演算子の
&&と||
匿名メソッド
新しい匿名メソッドの作成はサポートされていません。
Visual Basic - サポートされていない式
動的オブジェクト
動的として静的に型指定されたデバッガー式で変数を使用できます。 IDynamicMetaObjectProviderを実装するオブジェクトがウォッチ ウィンドウで評価されると、動的ビュー ノードが追加されます。 [動的ビュー] ノードにはオブジェクト メンバーが表示されますが、メンバーの値の編集は許可されません。
動的オブジェクトの次の機能はサポートされていません。
複合演算子
+=、-=、%=、/=、および*=多くのキャスト、例えば数値キャストや型引数キャスト
2 つ以上の引数を持つメソッド呼び出し
2 つ以上の引数を持つプロパティゲッター
引数を持つプロパティ セッター
インデクサーへの割り当て
ブール演算子の
&&と||
ローカル定数
ローカル定数はサポートされていません。
エイリアスのインポート
インポート エイリアスはサポートされていません。
変数宣言
デバッガー ウィンドウで明示的な新しい変数を宣言することはできません。 ただし、 イミディエイト ウィンドウ内に新しい暗黙的な変数を割り当てることができます。 これらの暗黙的な変数はデバッグ セッションのスコープであり、デバッガーの外部からはアクセスできません。 たとえば、ステートメントo = 5o新しい変数を暗黙的に作成し、値 5 を割り当てます。 このような暗黙的な変数は、型がデバッガーによって推論できる場合を除き 、Object 型です。
サポートされていないキーワード
AddressOfEndErrorExitGotoOn ErrorResumeReturnSelect/CaseStopSyncLockThrowTry/Catch/FinallyWith名前空間またはモジュール レベルのキーワード (
End SubやModuleなど)。