Last active
September 21, 2015 15:36
php backtrace bug
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
function brokenTrace($arg1, $arg2){ | |
backtraceWrapper(); | |
echo exceptionTraceWrapper(); | |
echo "\n"; | |
echo "unsetting arg1\n"; | |
unset($arg1); | |
backtraceWrapper(); | |
echo exceptionTraceWrapper(); | |
echo "\n"; | |
echo "unsetting arg2\n"; | |
unset($arg2); | |
backtraceWrapper(); | |
echo exceptionTraceWrapper(); | |
} | |
brokenTrace("string", "anything else"); | |
echo "\n"; | |
function backtraceWrapper(){ | |
$bt = debug_backtrace(); | |
var_dump($bt[1]['args']); | |
} | |
function exceptionTraceWrapper() | |
{ | |
$e = new \Exception(); | |
$trace = explode("\n", $e->getTraceAsString()); | |
// reverse array to make steps line up chronologically | |
$trace = array_reverse($trace); | |
array_shift($trace); // remove {main} | |
array_pop($trace); // remove call to this method | |
$length = count($trace); | |
$result = array(); | |
for ($i = 0; $i < $length; $i++) | |
{ | |
$result[] = ($i + 1) . ')' . substr($trace[$i], strpos($trace[$i], ' ')); // replace '#someNum' with '$i)', set the right ordering | |
} | |
return "\t" . implode("\n\t", $result) . "\n"; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment