存储过程调试器提供了设置断点、进入单个语句(步进、步出、步过)、计算和更改局部变量值、计算断点以及其他调试任务的工具。
调试器在每个调试会话开始时重新创建aserversidedebugger
数据库在您的服务器。该数据库有助于跟踪仪器化代码,并在调试例程中实现可观察性逻辑。您的当前连接需要拥有创建该数据库及其相关存储例程、函数和表的特权。
调试器在幕后进行更改,以临时向您调试的存储例程中添加检测代码。你必须有改变日常
您调试的每个存储过程、函数或触发器的特权。(包括正在调试的过程所调用的过程和函数,以及触发的触发器。)
要启动调试器,请遵循以下步骤:
此时,Visual Studio切换到调试模式,打开以步进模式调试的例程的源代码,位于第一个语句上。
如果您调试的初始例程有一个或多个参数,则会弹出一个带有网格的弹出框(每个参数有一行,三列:一列用于参数,一列用于参数值(这是可编辑的),一列用于使参数值无效(复选框)。设置完所有参数值后,可以按
启动调试会话,或 取消调试会话。为了查看所存储例程的内部工作,调试器准备一个被调试的过程、函数或触发器的特殊版本,用额外的代码对其进行检测,以跟踪正在进入的当前行和所有局部变量的值。从被调试的例程中调用的任何其他存储过程、函数或触发器都以同样的方式检测。例程的调试版本会自动为您准备好,当调试会话结束时(通过按F5或转变+F5),程式的原始版本会自动复原。
每个仪器化例程的原始版本(没有仪器化的版本)的副本存储在AppData \ \ MySqlDebuggerCache徘徊
当前Windows用户的文件夹(调用System.Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData)
在。net中,加上附加MySqlDebuggerCache
.每个仪器化例程都有一个文件,命名为
.例如,在Windows 7中,对于名为routine_name
.mysql参考小组
,路径为C:\Users\fergs\AppData\Roaming\ MySqlDebuggerCache
.
使用两个线程,一个用于调试器,另一个用于被调试的例程。线程严格交替运行,当每个语句在存储的例程中执行时,在调试器和例程之间切换。
调试器的外观和感觉与c#、VB的标准Visual Studio调试器相同。净或c++。特别是,以下几点是正确的:
当地人和手表
显示当地人选项卡,选择菜单项 , , .
的当地人TAB列出当前作用域中可用的所有变量:用定义的变量
声明
在例程、参数参数和被引用的会话变量中的任何点。如果最后一个步骤操作更改了一个局部变量的值,那么它的值将以红色突出显示(直到执行另一个语句或执行另一个步骤为止)。
您可以更改任何本地的值。
显示看选项卡,选择菜单项 , , .
要定义一个手表,请键入任何有效的MySQL表达式,可选地包括函数调用。如果表的计算在当前上下文中(当前堆栈框架)有意义,它将显示其值,否则将在定义表的同一行中显示错误消息。
在调试触发器时,除了声明的任何局部变量或引用的会话变量外,还会列出新对象和旧对象(如果适用)。例如在触发器中
插入
,对于定义如下的表:创建表t1(id int, myname varchar(50));
局部变量会列出额外的变量
new.id
而且new.myname
.对于一个更新
触发器,你也会得到额外的变量old.id
而且old.myname
.可以像操作任何普通局部变量一样操作新对象和旧对象中的这些变量。
调用堆栈
显示调用堆栈选项卡,选择菜单项 , , .
中的堆栈跟踪调用堆栈选项卡)将列出所有堆栈跟踪,每个例程调用一个跟踪。黄色标记的是当前的步进点。单击另一个将在编辑器中激活该例程源的选项卡,用绿色突出显示最后一个语句步骤。
步进
新例程的步进从第一个可执行指令开始(不包括声明、处理程序、游标声明等)。
要进入条件处理程序的代码,必须在MySQL例程的其余部分中触发条件。
下一个要执行的语句用黄色突出显示。
要继续步进,您可以选择进入(按季),走出(按F10)或跨过(按转变+季).
您可以退出任何函数、触发器或存储过程。如果您退出主例程,它将运行该例程直至完成并完成调试会话。
您可以跳过存储过程调用、存储函数和触发器。(要跳过触发器,请跳过触发触发器的语句。)
在进入单个语句时,调试器将进入该语句调用的每个单独函数和该语句触发的每个触发器。调试它们的顺序与MySQL服务器执行它们的顺序相同。
此外,输入存储函数或触发器的次数取决于函数计算的行数或触发器影响的行数。例如,如果你按季(进入)到一个
更新
中修改三行的语句(调用列的函数集
子句,从而为三行中的每一行调用函数),您将连续三次进入该函数,每行一次。您可以通过禁用在给定存储函数中定义的任何断点并按下键来加速此调试会话转变+季走出。在本例中,被存储函数的不同实例的调试顺序是特定于服务器的:与当前MySQL服务器实例计算三个函数调用的顺序相同。
断点
显示断点选项卡,选择菜单项 , , .
的断点TAB将显示所定义的所有断点。控件顶部的工具栏可以逐个或一次性启用和禁用断点断点选项卡)。
您只能在调试会话中间定义新的断点。在任何MySQL编辑器的左侧灰色边框中单击,或单击MySQL编辑器中的任何位置并按下F9.在熟悉的Visual Studio方式中,您按下F9在该行中创建断点一次,再按一次以删除该断点。
定义断点后,它将显示为启用(如果该行是放置断点的有效语句,则显示为当前行左侧的填充红圈)或禁用(如果当前行不能放置断点,则显示为当前行左侧的未填充红圈)。
要定义条件断点,在创建断点之后,右键单击红点并选择条件…….如果条件为,可以在那里放入任何有效的MySQL表达式和状态是真的或已经改变了.前者将在每次条件为真时触发断点,后者将在每次条件值更改时触发断点。(如果您定义了一个条件断点,那么进入已定义的断点所在的行来触发这样的断点是不够的。)
要定义通过计数断点,在创建断点后,右键单击红点并选择计数…….在弹出的对话框中,定义要设置的特定条件。例如,当命中数等于时中断值3将在第三次命中断点时触发该断点。
若要中止调试会话(以及当前例程调用堆栈的执行),请按转变+F5.
要运行例程直到完成(或直到遇到下一个断点),请按F5.
有关可以使用的所有功能(除了有文档记录的快捷方式外),请参阅
Visual Studio的菜单。
正在调试的代码不能使用
get_lock
或release_lock
MySQL函数,因为调试器基础结构在内部使用它们来同步调试器和调试例程。被调试的代码必须避免使用任何事务代码(
开始事务
,提交
,回滚
),因为可能会清除调试器表的内容。(这个限制将来可能会被取消)。控件中的例程无法进行调试
serversidedebugger
数据库。运行正在调试的例程的MySQL服务器可以是5.0之后的任何MySQL服务器版本,并运行在任何支持的平台上。
总是在测试和开发服务器上运行调试会话,而不是在MySQL生产服务器上运行,因为调试可能会导致暂时的性能问题甚至死锁。被调试的例程的仪器化版本使用的锁可能不属于生产代码的其余部分。