デバッガのコマンドと機能に関する制約
更新 : 2007 年 11 月
このトピックの内容は、次の製品に該当します。
Edition |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express |
||||
Standard |
||||
Pro/Team |
表の凡例 :
対象 |
|
該当なし |
|
既定で非表示のコマンド |
SQL デバッガは多くの機能を備えていますが、すべてが一般的なデバッグ機能というわけではありません。SQL デバッグでは、ブレークポイントの設定やステップなど、ほとんどのデバッガ コマンドがサポートされます。変数や渡されるパラメータの値は、[ローカル] ウィンドウで表示できます。また、式を [ウォッチ] ウィンドウにドラッグして、プロシージャを実行またはステップ実行するときに式を追跡できます。
ただし、SQL Server が備える一部の基本的な特性に起因して、SQL のデバッグは多様な環境で行われることになります。デバッグの制約は、T-SQL のデバッグのみに適用されることもありますし、SQL CLR デバッグのみに適用される場合もあります。SQL のすべてのデバッグに適用される制約もあります。
SQL のデバッグに関する一般的な制約
エディット コンティニュは使用できません。
[呼び出し履歴] ウィンドウでは、[カーソル行の前まで実行] を使用できません。
SQL ステートメントの処理中は [中断] を使用できません。
SQL PRINT ステートメントの出力は、デバッガまたはデータベース出力ペインには表示されません。
Visual Studio で、AutoRollback は使用できません。データが変更されるバグを再現すると、データが変更されるためバグを見失う可能性があります。
いくつかのウィンドウが使用できなくなるか、機能しなくなります。このようなウィンドウを次に示します。
メモリ
レジスタ
T-SQL の逆アセンブル
T-SQL デバッグの制約
ブレークポイント条件およびフィルタ処理は、サポートされていません。
SQL には真のメモリやレジスタがないため、[メモリ] ウィンドウや [レジスタ] ウィンドウは使用できません。
[次のステートメントの設定] を使用して実行シーケンスを変更することはできません。SQL コードのフロー制御とステートメントの順序に従う必要があります。代替手段として、SQL コード ブロックを制御ステートメントで囲み、変数値を変更できます。
T-SQL オブジェクト内部からは、.Net Framework の変数やプロパティにアクセスできません。
[イミディエイト] ウィンドウは表示されますが、値に変数を設定したり、データベースに対してクエリを実行したりするなど、有効な機能を使用できません。
いくつかのウィンドウが使用できなくなるか、機能しなくなります。このようなウィンドウを次に示します。
逆アセンブル
スレッド
レジスタ
プロセス
モジュール
SQL CLR デバッグの制約
個々のサーバーでは、1 つの SQL CLR デバッグ セッションしか実行できません。これは、すべての SQL CLR コード実行が、SQL CLR デバッグ中に停止するためです。このような理由により、SQL CLR デバッグを実行する場合、デバッガを使用するユーザーには、SQL システム管理者の権限が必要です。
SQL CLR デバッグは、運用サーバーで行わないでください。SQL CLR デバッグには危険が伴います。SQL CLR デバッガは、プロセス メモリの読み取りと書き込みを実行することがあり、サーバー プロセスの任意のコードを実行する可能性があります。それによって、サーバーで管理されているすべてのスレッドが停止します。また、デバッグ セッションを終了したときに SQL Server が停止することがあります。
SQL CLR オブジェクト内では、@@ROWCOUNT など SQL のグローバル変数にアクセスできません。
Visual Studio の SQL Server プロジェクトでは、.NET Framework クラス ライブラリのサブセットに対する参照を追加することのみ可能です。すべてのアセンブリが参照可能なわけではありません。