<?php  
use \Luminova\Debugger\Tracer; 
 
function getDebugTracing(array $trace): void { 
?> 
<h3>BACKTRACE</h3> 
<ol class="trace"> 
    <?php foreach($trace as $index => $row): ?> 
        <?php if(isset($row['function']) && $row['function'] === 'display'): ?> 
            <?php if(isset($row['args']) && is_file($row['args'][0]->getFile())): ?> 
            <li> 
                <p><?= htmlspecialchars($row['args'][0]->getFile() . ' : ' . $row['args'][0]->getLine(), ENT_QUOTES);?></p> 
                <div class="source"> 
                    <?= Tracer::highlight($row['args'][0]->getFile(), $row['args'][0]->getLine());?> 
                </div> 
            </li> 
            <?php endif; ?> 
        <?php elseif(isset($row['file']) && is_file($row['file']) && isset($row['class'])): ?> 
            <li> 
                <p> 
                    <?php if (isset($row['file']) && is_file($row['file'])) : ?> 
                        <?php if (isset($row['function']) && in_array($row['function'], ['include', 'include_once', 'require', 'require_once'], true)): ?> 
                            <?= htmlspecialchars($row['function'] . ' ' . trim($row['file']), ENT_QUOTES);?> 
                        <?php else: ?> 
                            <?= htmlspecialchars(trim($row['file']) . ' : ' . $row['line'], ENT_QUOTES);?> 
                        <?php endif;?> 
                    <?php else: ?> 
                        {PHP internal code} 
                    <?php endif; ?> 
 
                    <?php if(isset($row['class'])): ?> 
                          —  <?= htmlspecialchars($row['class'] . $row['type'] . $row['function'], ENT_QUOTES) ?> 
                        <?php if(!empty($row['args'])): ?> 
                            <?php $argsId = uniqid('error', true) . 'args' . $index ?> 
                            ( <a href="#" onclick="return toggle('<?= htmlspecialchars($argsId, ENT_QUOTES) ?>');">arguments</a> ) 
                            <div style="display:none;" id="<?= htmlspecialchars($argsId, ENT_QUOTES) ?>"> 
                                <table cellspacing="0"> 
 
                                <?php 
                                    $params = null; 
                                    if (!str_ends_with($row['function'], '}')) { 
                                        $params = (isset($row['class'])  
                                            ? new ReflectionMethod($row['class'], $row['function'])  
                                            : new ReflectionFunction($row['function']))->getParameters(); 
                                    } 
                                ?> 
 
                                <?php foreach($row['args'] as $key => $value): ?> 
                                    <tr> 
                                        <td><code><?= htmlspecialchars(isset($params[$key]) ? '$' . $params[$key]->name : "#{$key}", ENT_QUOTES) ?></code></td> 
                                        <td><pre><?= print_r($value, true) ?></pre></td> 
                                    </tr> 
                                <?php endforeach ?> 
 
                                </table> 
                            </div> 
                        <?php else: ?> 
                            () 
                        <?php endif; ?> 
                    <?php endif; ?> 
 
                    <?php if(!isset($row['class']) && isset($row['function'])):?> 
                          —   <?= htmlspecialchars($row['function'] ?? 'NULL', ENT_QUOTES) ?>() 
                    <?php endif; ?> 
                </p> 
                <div class="source"> 
                    <?= Tracer::highlight($row['file'], $row['line']);?> 
                </div> 
            </li> 
        <?php endif; ?> 
    <?php endforeach; ?> 
</ol> 
<?php }
 
 |