Mein aktueller Prozess zum Debuggen gespeicherter Prozeduren ist sehr einfach. Ich erstelle eine Tabelle namens "debug", in die ich während der Ausführung Variablenwerte aus der gespeicherten Prozedur einfüge. Auf diese Weise kann ich den Wert einer Variablen an einem bestimmten Punkt im Skript anzeigen. Gibt es jedoch eine bessere Möglichkeit, gespeicherte MySQL-Prozeduren zu debuggen?
mysql
database
debugging
stored-procedures
Cory House
quelle
quelle
Antworten:
Ich mache dir etwas sehr ähnliches.
Normalerweise füge ich einen DEBUG-Parameter hinzu, der standardmäßig false ist, und ich kann zur Laufzeit auf true setzen. Wickeln Sie dann die Debug-Anweisungen in einen "If DEBUG" -Block.
Ich verwende auch eine Protokollierungstabelle mit vielen meiner Jobs, damit ich Prozesse und das Timing überprüfen kann. Dort wird auch mein Debug-Code ausgegeben. Ich füge den Namen des aufrufenden Parameters, eine kurze Beschreibung, die Anzahl der betroffenen Zeilen (falls zutreffend), ein Kommentarfeld und einen Zeitstempel hinzu.
Gute Debugging-Tools sind einer der traurigen Fehler aller SQL-Plattformen.
quelle
Die folgende
debug_msg
Prozedur kann aufgerufen werden, um einfach eine Debug-Nachricht an die Konsole auszugeben:Führen Sie den Test dann folgendermaßen aus:
Dies führt zu folgender Ausgabe:
quelle
INSERT INTO my_log_table (message) VALUES (msg)
alle Debug-Meldungen abrufen, wenn die Funktionsaufrufe beendet sind (dh Sie sind wieder in der Prozedur)Ja, es gibt spezielle Tools für diese Art von Dingen - MySQL Debugger .
quelle
So debuggen Sie eine gespeicherte MySQL-Prozedur.
Debugger des armen Mannes:
Erstellen Sie eine Tabelle namens logtable mit zwei Spalten.
id INT
undlog VARCHAR(255)
.Führen Sie eine automatische Inkrementierung der ID-Spalte durch.
Verwenden Sie dieses Verfahren:
Platzieren Sie diesen Code an einer beliebigen Stelle, an der Sie eine Nachricht in der Tabelle protokollieren möchten.
Es ist ein netter schneller und schmutziger kleiner Logger, um herauszufinden, was los ist.
quelle
Es gibt GUI-Tools zum Debuggen gespeicherter Prozeduren / Funktionen und Skripte in MySQL. Ein anständiges Tool, das dbForge Studio für MySQL bietet und über umfangreiche Funktionen und Stabilität verfügt.
quelle
Der Debugger für MySQL war gut, aber nicht kostenlos. Das benutze ich jetzt:
Verwendung in gespeicherten Prozeduren:
Verwendung der gespeicherten Prozedur:
quelle
Ein anderer Weg wird hier vorgestellt
http://gilfster.blogspot.co.at/2006/03/debugging-stored-procedures-in-mysql.html
mit benutzerdefinierten Debug-MySQL-Prozeduren und Protokollierungstabellen.
Sie können auch einfach eine Auswahl in Ihren Code einfügen und prüfen, ob er ausgeführt wird.
Ich habe diese Idee von
http://forums.mysql.com/read.php?99,78155,78225#msg-78225
Außerdem hat jemand eine Vorlage für benutzerdefinierte Debug-Prozeduren auf GitHub erstellt.
Siehe hier
http://www.bluegecko.net/mysql/debugging-stored-procedures/ https://github.com/CaptTofu/Stored-procedure-debugging-routines
Wurde hier erwähnt
Wie kann man Ausnahmen in Triggern und Speicherprozeduren für MySQL abfangen?
quelle
Ich platziere einfach select-Anweisungen in Schlüsselbereichen der gespeicherten Prozedur, um den aktuellen Status von Datensätzen zu überprüfen, und kommentiere sie dann aus (--select ...) oder entferne sie vor der Produktion.
quelle
Ich bin zu spät zur Party, habe aber noch mehr Bier mitgebracht:
http://ocelot.ca/blog/blog/2015/03/02/the-ocelotgui-debugger/ und https://github.com/ocelot-inc/ocelotgui
Ich habe es versucht, und es scheint ziemlich stabil zu sein, Breakpoints und Variable Inspection zu unterstützen.
Es ist keine komplette Suite (nur 4,1 MB), hat mir aber sehr geholfen!
So funktioniert es: Es lässt sich in Ihren MySQL-Client integrieren (ich verwende Ubuntu 14.04) und nach der Ausführung:
Auf Ihrem Server wird eine neue Datenbank installiert, die den Debugging-Prozess steuert. So:
Sie haben die Möglichkeit, Schritt für Schritt durch Ihren Code zu gehen und Ihre Variablen zu "aktualisieren". So können Sie besser sehen, was in Ihrem Code vor sich geht.
Wichtiger Tipp: Während des Debuggens werden Sie möglicherweise Änderungen vornehmen (die Prozedur neu erstellen). Führen Sie nach einer Neuerstellung Folgendes aus: $ exit und $ setup vor einem neuen $ debug
Dies ist eine Alternative zu den Methoden "Einfügen" und "Protokollieren". Ihr Code bleibt frei von zusätzlichen "Debug" -Anweisungen.
Bildschirmfoto:
quelle
MySQL Connector / Net 6.6 bietet eine Funktion zum Debuggen gespeicherter Prozeduren und Funktionen
quelle
MySql Connector / NET enthält auch einen Debugger für gespeicherte Prozeduren, der ab Version 6.6 in Visual Studio integriert ist. Das Installationsprogramm und die Quelle finden Sie hier: http://dev.mysql.com/downloads/connector/net/
Einige Dokumentationen / Screenshots: https://dev.mysql.com/doc/visual-studio/en/visual-studio-debugger.html
Sie können den Ankündigungen hier folgen: http://forums.mysql.com/read.php?38,561817,561817#msg-561817
UPDATE: MySql für Visual Studio wurde von Connector / NET in ein separates Produkt aufgeteilt. Sie können es (einschließlich des Debuggers) hier auswählen: https://dev.mysql.com/downloads/windows/visualstudio/1.2.html (noch) kostenlos & Open Source).
HAFTUNGSAUSSCHLUSS: Ich war der Entwickler, der die Debugger-Engine für gespeicherte Prozeduren für das Produkt MySQL for Visual Studio erstellt hat.
quelle
Der erste und stabile Debugger für MySQL befindet sich in dbForge Studio für MySQL
quelle
Ich hatte zwei verschiedene Tools zum Debuggen von Prozeduren und Funktionen verwendet:
quelle
Die benutzerdefinierte MySQL-Variable (in der Sitzung freigegeben) kann als Protokollierungsausgabe verwendet werden:
wird ausgegeben:
quelle
Kröte MySQL. Es gibt eine Freeware-Version http://www.quest.com/toad-for-mysql/
quelle
Antwort auf entsprechende diese durch @Brad Parks Nicht sicher über die MySQL - Version, aber ich war 5,6, also ein wenig Zwicken Werke:
Ich habe eine Funktion erstellt,
debug_msg
die Funktion (keine Prozedur) ist und Text zurückgibt (keine Zeichenbeschränkung), und dann die Funktion als SELECTdebug_msg
(params) AS aufgerufenmy_res_set
, Code wie folgt :quelle