Create a conditional breakpoint in PhpStorm with Xdebug
Video Lesson: Create a conditional breakpoint in PhpStorm with Xdebug
Learn how to set up conditional breakpoints in PhpStorm with Xdebug to pause execution only when specific conditions are met.
Published 2 months ago
Share with colleagues:
Lesson Content
Conditional breakpoints are regular breakpoints with a twist – they only pause execution when specific conditions are met. They're incredibly useful when debugging loops, or when you only care to debug certain scenarios.
Let's use a real-world example. Say we're processing orders and only want to debug those over $100:
<?php
function processOrders(array $orders): void {
foreach ($orders as $order) {
// Complex order processing logic here
if ($order['status'] === 'pending') {
$total = calculateOrderTotal($order);
// Additional processing logic...
updateOrderStatus($order, $total);
}
}
}
function calculateOrderTotal(array $order): float {
$total = 0;
foreach ($order['items'] as $item) {
$total += $item['price'] * $item['quantity'];
}
return $total;
}
function updateOrderStatus(array &$order, float $total): void {
// In a real app, this would update the order in a database
// but for this example, we'll keep it simple
$order['total'] = $total;
$order['status'] = 'processed';
}
// Example usage with multiple orders
$orders = [
[
'id' => 1,
'status' => 'pending',
'items' => [
['price' => 10.00, 'quantity' => 2],
['price' => 25.50, 'quantity' => 1]
]
],
[
'id' => 2,
'status' => 'pending',
'items' => [
['price' => 100.00, 'quantity' => 1],
['price' => 50.00, 'quantity' => 3]
]
]
];
processOrders($orders);
We want to set a breakpoint in the processOrders
function on the line updateOrderStatus($order, $total);
Here's how to set up your conditional breakpoint:
Click in the left gutter to create a regular breakpoint
Right-click the red breakpoint dot
Enter
$total > 100
in the "Condition" field
That's it! The debugger will now only pause when an order's total exceeds $100.
PhpStorm lets you use any valid PHP expression as your condition, with a few limitations:
Keep expressions to a single line
No variable assignments
Simple expressions work best
Here are some practical examples you might find useful:
$order['id'] === 2 // Break on a specific order
in_array($order['id'], [2, 3]) // Break on multiple orders
count($order['items']) > 3 // Break when orders have lots of items