调试器命令和功能的限制

更新:2007 年 11 月

本主题适用于:

版本

Visual Basic

C#

C++

Web Developer

速成版

主题不适用 主题不适用 主题不适用 主题不适用

标准版

主题不适用 主题不适用 主题不适用 主题不适用

专业团队版

主题适用 主题适用 主题适用 主题适用

表格图例:

主题适用

适用

主题不适用

不适用

主题适用,但命令默认情况下隐藏

默认情况下隐藏的一条或多条命令。

SQL 调试器提供很多常见的调试功能,但不是全部常见调试功能。SQL 调试支持大多数调试器命令,如设置断点和单步执行。可以在“局部变量”窗口中查看变量值和传递的参数值。当逐句通过或运行过程时,也可以将表达式拖动到“监视”窗口中以跟踪它们。

但是,由于 SQL Server 本身的一些基本特征,调试 SQL 发生的环境与普通调试发生的环境有很大的差异。某些调试限制仅适用于 T-SQL 调试或 SQL CLR 调试。另外一些限制适用于所有 SQL 调试。

关于 SQL 调试的一般限制条件

  • 不能使用“编辑并继续”。

  • 不能在“调用堆栈”窗口中使用“运行到光标处”。

  • 当正在处理 SQL 语句时,不能使用“中断”。

  • SQL PRINT 语句的输出不显示在调试器中或“数据库输出”窗格中。

  • 在 Visual Studio 中不能使用自动回滚 (AutoRollback)。如果再现更改数据的 bug,则可能会因更改了数据而丢失该 bug。

  • 许多窗口要么不可用,要么不提供任何功能。它们是:

    • 内存

    • 寄存器

    • T-SQL 的“反汇编”窗口

T-SQL 调试限制

  • 不支持断点条件和筛选器。

  • 因为 SQL 没有真正的内存或寄存器,所以不能使用“内存”窗口或“寄存器”窗口。

  • 不能使用“设置下一语句”更改执行序列。您必须遵循 SQL 代码中的流控制顺序和语句顺序。作为对此限制的一种解决方法,您可以将控制语句放在 SQL 代码块周围,并更改控制语句中变量的值。

  • 不能从 T-SQL 对象内部访问任何 .Net Framework 变量或属性。

  • 可以显示“即时”窗口,但不能使用它执行任何有用的操作,例如为变量赋值和查询数据库。

  • 许多窗口要么不可用,要么不提供任何功能。它们是:

    • 反汇编

    • 线程

    • 寄存器

    • 进程

    • 模块

SQL CLR 调试限制

  • 由于在进行任何 SQL CLR 调试时,所有 SQL CLR 代码执行都将冻结,所以每台服务器上只能发生一个 SQL CLR 调试会话。因此,调试器用户需要是 SQL 系统管理员才能执行 SQL CLR 调试。

  • 决不应在生产服务器上执行 SQL CLR 调试。SQL CLR 调试有很大风险:SQL CLR 调试器可以读写进程内存,并可以在服务器进程中执行任意代码。这会导致服务器上的所有托管线程停止。而且当终止调试会话时,SQL Server 会暂停。

  • 从 CLR SQL 对象内不能访问全局 SQL 变量,如 @@ROWCOUNT。

  • 在 Visual Studio SQL Server 项目中,只能添加对 .NET Framework 类库子集的引用。不是所有程序集都可引用。

请参见

概念

SQL 调试限制

调试 SQL