| name | drupal-debugging |
| description | Drupal debugging techniques โ Devel module, Drush watchdog, Twig debug, XDebug, error logging, and common troubleshooting patterns. |
Drupal Debugging
Drush Log Watching
ddev drush ws --severity=error
ddev drush ws --severity=error --count=20
ddev drush ws --count=50
ddev drush ws --type=php --count=20
PHP Inline Debugging
ddev drush php:eval "var_dump(\Drupal::config('my_module.settings')->getRawData());"
ddev drush php:eval "var_dump(\Drupal::hasService('my_module.my_service'));"
ddev drush php:eval "class_exists('Drupal\my_module\Service\MyService') ? print 'Found' : print 'Not found';"
ddev drush php:eval "
\$node = \Drupal::entityTypeManager()->getStorage('node')->load(1);
print_r(\$node->toArray());
"
Twig Debugging
Enable in sites/default/services.yml:
parameters:
twig.config:
debug: true
auto_reload: true
cache: false
Then in templates:
{{ dump(content) }}
{{ dump(node) }}
{{ dump(_context|keys) }}
HTML comments in source will show template suggestions:
Devel Module
composer require drupal/devel
ddev drush en devel -y
In PHP:
dpm($variable);
ksm($variable);
dvm($variable);
Cache Debugging
ddev drush cr
ddev drush php:eval "\Drupal::service('theme.registry')->reset();"
curl -I https://my-project.ddev.site/
ddev drush state:get drupal.maintenance_mode
Service Container Debugging
ddev drush devel:services | grep my_module
ddev drush devel:services
ddev drush php:eval "
\$def = \Drupal::getContainer()->getDefinition('my_module.my_service');
var_dump(\$def);
"
Module/Hook Debugging
ddev drush pm:list --status=enabled
ddev drush php:eval "
\$modules = \Drupal::moduleHandler()->getImplementations('form_alter');
print implode(', ', \$modules);
"
ddev drush pm:info my_module
Common Problems and Solutions
| Problem | Solution |
|---|
| Class not found | Check namespace, PSR-4 in .info.yml, run composer dump-autoload |
| Service not found | Check services.yml syntax, run ddev drush cr |
| Template not used | Enable Twig debug, check template suggestions in HTML comments |
| Hook not firing | Check class is registered in services.yml, verify Hook attribute |
| Config not saving | Check config schema exists in config/schema/ |
| Migration failing | ddev drush ws for details, check field mappings |
XDebug with DDEV
ddev xdebug on
ddev xdebug off
ddev xdebug status
Configure IDE (PHPStorm) to listen on port 9003.