Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios
-
Upload
erik-hansen -
Category
Technology
-
view
3.765 -
download
1
Transcript of Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios
![Page 1: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/1.jpg)
BEST PR
ACTICES F
OR MAGENTO
DEBUGGING
ER
I K H
AN
SE
N | C
O- F
OU
ND
ER
AN
D D
I RE
CT
OR
OF
TE
CH
NO
LO
GY
AT
CL
AS
SY
LL
AM
A S
TU
DI O
S
![Page 2: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/2.jpg)
OVERVIEW
• Environment configuration
• PHP debugging with Magento/Eclipse
• Common Magento development problems
• Mage::log()
• Quick tips
![Page 3: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/3.jpg)
The Imagine Conference has been excellently planned, but… they made one fatal mistake…
One important detail: My name is Erik Hansen
![Page 4: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/4.jpg)
Erik != Eric
![Page 5: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/5.jpg)
ENVIR
ONMENT
CONFIGURAT
ION
![Page 6: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/6.jpg)
ENABLE DEVELOPER MODE
• Enable Mage::isDeveloperMode() on development and staging environments• Preferably, set the MAGE_IS_DEVELOPER_MODE via .htaccess file
or server configuration. Example:
• Alternatively, set the developer mode using conditional code in index.php:
![Page 7: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/7.jpg)
SHOW ALL ERRORS IN DEVELOPER MODE• Modify index.php with this conditional code to ensure that
all errors are displayed when in developer mode:
![Page 8: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/8.jpg)
NATIVE MAGENTO EXCEPTIONS
![Page 9: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/9.jpg)
Links to the location the
file
vs. XDEBUG EXCEPTIONS
Fully expanded argument variables
Local variables
![Page 10: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/10.jpg)
INSTALL XDEBUG
• Install Xdebug (an Apache module) on your development/staging servers
• My recommended xdebug configuration values: http://bit.ly/gspkIK
![Page 11: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/11.jpg)
• Modify the Mage::run() method to not catch exceptions if developer mode is on (blog post explaining how to make this modification: http://bit.ly/feJE2y)
MODIFY THE Mage CLASS
![Page 12: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/12.jpg)
• Modify the Mage_Core_Model_App::setErrorHandler() method to not set an error handler if developer mode is on (blog post explaining how to make this modification: http://bit.ly/co1qc4 )
MODIFY THE Mage_Core_Model_App CLASS
![Page 13: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/13.jpg)
CONFIGURE EXCEPTION HANDLER TO EMAIL REPORTS ON A PRODUCTION SITE
• Optimize the way that exceptions are handled on a production site
• Configure Magento to send email upon every exception
![Page 14: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/14.jpg)
PHP
DEBUGGIN
G WIT
H
MAGENTO/E
CLIPSE
![Page 15: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/15.jpg)
BASIC XDEBUG/ECLIPSE SETUP
• Xdebug – Use config setting from previous slide
• Eclipse – Follow configuration instructions below:
1
2
![Page 16: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/16.jpg)
Link to video: http://www.youtube.com/watch?v=6AynpmjW5us
![Page 17: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/17.jpg)
COMMON MAGENTO
DEVELO
PMENT
PROBLE
MS
![Page 18: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/18.jpg)
UNCOVER THE SOURCE OF SQLSTATE ERRORS
• What do you do when Magento throws a generic SQLSTATE database error?
![Page 19: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/19.jpg)
UNCOVER THE SOURCE OF SQLSTATE ERRORS
• Example log file from SQLSTATE error
SQL error message
Faulty SQL query
Backtrace up to point of exception
![Page 20: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/20.jpg)
UNCOVER THE SOURCE OF SQLSTATE ERRORS• Modify Zend_Db_Adapter_Pdo_Abstract to get backtraces for single
queries.• Copy to app/code/local/Zend/Db/Adapter/Pdo/Abstract.php
![Page 21: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/21.jpg)
UNCOVER THE SOURCE OF SQLSTATE ERRORS
• Modify Zend_Db_Statement_Pdo to get backtraces for transactional query errors
• Copy to app/code/local/Zend/Db/Adapter/Pdo/Abstract.php
![Page 22: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/22.jpg)
Problem: You’ve created a basic skeleton of a module with a module xml file, config.xml file, layout file, and block, but the module isn’t showing. Here are some quick steps you can take to debug the issue:
THINGS TO CHECK WHEN A CUSTOM MODULE DOESN’T LOAD
1
3
2
![Page 23: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/23.jpg)
DEBUGGING BY PROCESS OF ELIMINATIONProblem: You are working on a site with 5 third-party modules and 9 custom modules. You’ve heavily modified the way that products work in the system. You run into an error where products aren’t saving from the admin.
• You can either:• Work backward by reading code OR:• Isolate the issue by disabling modules
![Page 24: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/24.jpg)
DEBUGGING BY PROCESS OF ELIMINATION
1 2 3
• Disable all custom modules, then selectively re-enable modules until you’ve found the problematic module
![Page 25: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/25.jpg)
DEBUGGING BY PROCESS OF ELIMINATION• Once the offending module is identified, comment out sections of config.xml to determine component that is causing the error
1 2 3
![Page 26: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/26.jpg)
VAGUE ERROR MESSAGEProblem: Your client tries to place an order in the admin. When
doing so, they get a generic error message about the “The product could not be found”. You check the error and exception logs, but you have nothing to work with. What do you do?
1
2
3
![Page 27: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/27.jpg)
DISABLING A MODULE VS DISABLING BLOCK OUTPUT
VS
![Page 28: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/28.jpg)
WHEN COLLECTIONS DON’T LOAD THE ITEMS YOU WANT• $collection->load(true, true); logs the query to system.log and prints it to screen
• You can then use that query in a SQL tool to see why items aren’t loading
• Reference this Knowledge Base article for tips on collections: http://bit.ly/h0itx6
![Page 29: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/29.jpg)
A MODEL/BLOCK/HELPER REWRITE WON’T WORK…• Is another module trying to override the same
model/block/helper that you’re trying to override?
![Page 30: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/30.jpg)
MAGE::LOG
![Page 31: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/31.jpg)
USING MAGE::LOG – BASIC EXAMPLE
• Logging is disabled by default. Enable it in Configuration > Developer > Log Settings
• Mage::log() allows you to log code to either the default var/logs/system.log file, or a custom file.
• Message gets logged to var/logs/customfile.log
![Page 32: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/32.jpg)
USING MAGE::LOG – NOTIFICATIONS/ERROR NOTICES
![Page 33: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/33.jpg)
USING MAGE::LOG – LOGGING API RESPONSESView XML/CGI responses from API calls, like shipping quote
requests
![Page 34: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/34.jpg)
USING MAGE::LOG –DETERMINE CODE COVERAGEFind out if a certain line of code is getting reached. Alternative to
using debugger.
![Page 35: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/35.jpg)
USING MAGE::LOG – VIEWING LOG DATA
• You can monitor the contents of the log files using:• Command-line: tail –f <file_name>• OS X: Console.app (Must have developer tools installed)• Windows: Baretail (http://www.baremetalsoft.com/baretail/ )
![Page 36: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/36.jpg)
QUICK T
IPS
![Page 37: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/37.jpg)
CHECK THE BUG TRACKER / FORUMS
• Someone may have already solved your problem
• If the bug tracker has marked an item as resolved, look in the comments for a code patch, or the SVN trunk
![Page 38: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/38.jpg)
WILL A NEWER VERSION OF MAGENTO FIX THE ISSUE AT HAND?
• Setup upgrade environment and do a quick upgrade to latest production release to see if that solves the issue
![Page 39: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/39.jpg)
ISOLATE CODE IN A “SANDBOX.PHP” FILE• Allows you to run code outside of the context of a
controller/page
• Copy index.php to sandbox.php
• Modify Mage::run to Mage::app
![Page 40: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/40.jpg)
GENERAL ADVICE
• Don’t get stuck in a certain way of solving problems.
• Read (and understand) the code
• Before delving into a problem headlong, take a step back and think holistically about the problem
![Page 41: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/41.jpg)
QUESTIONS?
![Page 42: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/42.jpg)
VARIE
N_PROFIL
ER
![Page 43: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/43.jpg)
OPTIMIZING BUGGY/SLOW CODE W/ VARIEN_PROFILER
• Find out what events are getting triggered on a page
• How many times is your custom code running?
• Optimize slow code
![Page 44: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/44.jpg)
STANDARD MAGENTO PROFILE (OUTPUT IN HTML TABLE)• You must enable profiler in System > Configuration > Developer >
Profile
![Page 45: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/45.jpg)
CUSTOM MAGENTO PROFILE (OUTPUT TO LOG FILE)
![Page 46: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/46.jpg)
2
1
3
• Modify index.php
Profile gets logged to var/log/profiler.log
![Page 47: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/47.jpg)
CUSTOMIZED PROFILE THAT EXTENDS NATIVE PROFILE WITH MYSQL QUERIES
• Read about how to implement this on Branko Ajzele’s blog: http://bit.ly/geMSrT
![Page 48: Magento Imagine 2011 - Magento Debugging - Erik Hansen, Classy Llama Studios](https://reader035.fdocuments.in/reader035/viewer/2022081515/5583c1ebd8b42a784f8b4ba3/html5/thumbnails/48.jpg)
CONCLUSION
• Code samples referenced in slides available here: http://bit.ly/dNNgxU
• Eclipse walkthrough video: http://www.youtube.com/watch?v=6AynpmjW5us