Cor*_*use 116 mysql database debugging stored-procedures
我当前调试存储过程的过程非常简单.我创建了一个名为"debug"的表,我在运行时从存储过程中插入变量值.这允许我在脚本中的给定点看到任何变量的值,但有没有更好的方法来调试MySQL存储过程?
Bra*_*rks 64
debug_msg
可以调用以下过程来简单地将调试消息输出到控制台:
DELIMITER $$
DROP PROCEDURE IF EXISTS `debug_msg`$$
DROP PROCEDURE IF EXISTS `test_procedure`$$
CREATE PROCEDURE debug_msg(enabled INTEGER, msg VARCHAR(255))
BEGIN
IF enabled THEN
select concat('** ', msg) AS '** DEBUG:';
END IF;
END $$
CREATE PROCEDURE test_procedure(arg1 INTEGER, arg2 INTEGER)
BEGIN
SET @enabled = TRUE;
call debug_msg(@enabled, 'my first debug message');
call debug_msg(@enabled, (select concat_ws('','arg1:', arg1)));
call debug_msg(TRUE, 'This message always shows up');
call debug_msg(FALSE, 'This message will never show up');
END $$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
然后像这样运行测试:
CALL test_procedure(1,2)
Run Code Online (Sandbox Code Playgroud)
它将产生以下输出:
** DEBUG:
** my first debug message
** DEBUG:
** arg1:1
** DEBUG:
** This message always shows up
Run Code Online (Sandbox Code Playgroud)
Bob*_*bst 41
我做了一件与你非常相似的事情.
我通常会包含一个默认为false的DEBUG参数,我可以在运行时设置为true.然后将调试语句包装到"If DEBUG"块中.
我还使用了一个包含许多工作的日志记录表,以便我可以查看进程和时间.我的调试代码也在那里输出.我包括调用param名称,简要描述,受影响的行数(如果适用),注释字段和时间戳.
良好的调试工具是所有SQL平台的悲惨失败之一.
Geo*_*rge 28
是的,有一种专门用于此类工具的工具--MySQL Debugger.
Eri*_*ski 19
如何调试MySQL存储过程.
可怜的勒芒调试器:
创建一个名为logtable的表,其中包含两列,id INT
和log VARCHAR(255)
.
使id列自动增量.
使用此程序:
delimiter //
DROP PROCEDURE `log_msg`//
CREATE PROCEDURE `log_msg`(msg VARCHAR(255))
BEGIN
insert into logtable select 0, msg;
END
Run Code Online (Sandbox Code Playgroud)将此代码放在您要将消息记录到表的任何位置.
call log_msg(concat('myvar is: ', myvar, ' and myvar2 is: ', myvar2));
Run Code Online (Sandbox Code Playgroud)这是一个很好的快速和肮脏的小记录器来弄清楚发生了什么.
mysql的调试器很好,但它不是免费的.这就是我现在使用的:
DELIMITER GO$
DROP PROCEDURE IF EXISTS resetLog
GO$
Create Procedure resetLog()
BEGIN
create table if not exists log (ts timestamp default current_timestamp, msg varchar(2048)) engine = myisam;
truncate table log;
END;
GO$
DROP PROCEDURE IF EXISTS doLog
GO$
Create Procedure doLog(in logMsg nvarchar(2048))
BEGIN
insert into log (msg) values(logMsg);
END;
GO$
Run Code Online (Sandbox Code Playgroud)
存储过程中的用法:
call dolog(concat_ws(': ','@simple_term_taxonomy_id', @simple_term_taxonomy_id));
Run Code Online (Sandbox Code Playgroud)
存储过程的用法:
call resetLog ();
call stored_proc();
select * from log;
Run Code Online (Sandbox Code Playgroud)
另一种方式在这里介绍
http://gilfster.blogspot.co.at/2006/03/debugging-stored-procedures-in-mysql.html
使用自定义调试mySql过程和日志记录表.
您也可以在代码中放置一个简单的选择,看看它是否已执行.
SELECT 'Message Text' AS `Title`;
Run Code Online (Sandbox Code Playgroud)
我从中得到了这个想法
http://forums.mysql.com/read.php?99,78155,78225#msg-78225
还有人在GitHub上为自定义调试过程创建了一个模板.
看这里
http://www.bluegecko.net/mysql/debugging-stored-procedures/ https://github.com/CaptTofu/Stored-procedure-debugging-routines
这里提到了
我迟到了,但带来了更多的啤酒:
http://ocelot.ca/blog/blog/2015/03/02/the-ocelotgui-debugger/ 和 https://github.com/ocelot-inc/ocelotgui
我试过,看起来非常稳定,支持断点和变量检查.
它不是一个完整的套件(仅仅4,1 Mb),但对我帮助很大!
它是如何工作的:它与你的mysql客户端集成(我正在使用Ubuntu 14.04),并在你执行之后:
$install
$setup yourFunctionName
Run Code Online (Sandbox Code Playgroud)
它在您的服务器上安装一个新数据库,用于控制调试过程.所以:
$debug yourFunctionName('yourParameter')
Run Code Online (Sandbox Code Playgroud)
将为您提供逐步遍历代码的机会,并"刷新"您的变量,以便更好地查看代码中的内容.
重要提示:在调试时,您可能会更改(重新创建过程).重新创建后,在新的$ debug之前执行:$ exit和$ setup
这是"插入"和"日志"方法的替代方法.您的代码仍然没有其他"调试"指令.
截图:
MySQL Connector/Net 6.6具有调试存储过程和函数的功能
安装调试器
要启用存储过程调试程序:
- 对于Connector/Net 6.6:安装Connector/Net 6.6并选择Complete选项.
- 对于Connector/Net 6.7及更高版本:安装存储过程调试器所属的Visual Studio产品MySQL.
启动调试器
要启动调试程序,请按照下列步骤操作:
- 在Visual Studio Server资源管理器中选择一个连接.
- 展开Stored Procedures文件夹.只能直接调试存储过程.要调试用户定义的函数,请创建一个
调用该函数的存储过程.- 单击存储过程节点,然后右键单击并从上下文菜单中选择Debug Routine.
MySql Connector / NET还包括一个集成在Visual Studio 6.6版本中的存储过程调试器,您可以在此处获取安装程序和源代码:http : //dev.mysql.com/downloads/connector/net/
一些文档/屏幕截图:https : //dev.mysql.com/doc/visual-studio/en/visual-studio-debugger.html
您可以在此处遵循这些说明:http ://forums.mysql.com/read.php?38,561817,561817#msg-561817
更新:从连接器/ Visual Studio中被分裂净流入一个单独的产品MySQL的,你可以从这里挑吧(含调试)https://dev.mysql.com/downloads/windows/visualstudio/1.2.html (仍免费和开源)。
免责声明:我是为MySQL for Visual Studio产品编写存储过程调试器引擎的开发人员。