调试器命令和功能的限制
更新: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 类库子集的引用。不是所有程序集都可引用。