将debug_backtrace()分配给PHP中的变量

时间:2010-04-13 10:24:02

标签: php debugging

我试着给我发电子邮件debug_backtrace(),但它只打印出数组。 我需要将它分配给一个变量,以便var_export可以使用它。 我怎么能这样做?

7 个答案:

答案 0 :(得分:5)

有一个“打印出数组”的函数,debug_print_backtrace。你有没有把这两个混在一起? 默认情况下,var_export()和print_r()都会打印结果。如果您希望它们返回结果,则必须将true作为第二个参数传递(因此您可以将其分配给变量)

$result = var_export(debug_backtrace(), true);

答案 1 :(得分:3)

????

$var = debug_backtrace()

答案 2 :(得分:2)

debug_backtrace返回数组,但不打印它。处理电子邮件报告的代码可能有问题。你能在这里粘贴那段代码吗?

答案 3 :(得分:2)

发送以下$ msg:

$msg = print_r( debug_backtrace( ) , true ) ;

未经测试,但这是一种方式。

答案 4 :(得分:2)

Debug Backtrace返回一个数组,因此你可以像任何数组一样处理它。例如:

$trace = debug_backtrace();
foreach ($trace as $i=>$t) {
   $log .= $i .'=>'.$t['file'].' '.$t['line']."\n";
}

然后您可以通过电子邮件发送日志行。

答案 5 :(得分:1)

您可以使用print_r()将输出返回到变量并将其放入文件

$backtrace = debug_backtrace(true);
$dump = print_r($backtrace, true);
$f=fopen('export.txt','a');
fwrite($f, date("Y-m-d H:i:s")." ".$dump."\n");
fclose($f);         

答案 6 :(得分:0)

我知道这已经过时了,但我发现自己遇到了同样的问题。我无法100%确认,但它似乎很可能与内存不足错误有关。

我的方案 - 在第三方提交失败时,发送包含调试信息的电子邮件(即代码失败的地方)。我也将$trace = debug_backtrace()保存到变量中,然后使用var_export($trace, true)将其嵌入到电子邮件中。我在CodeIgniter框架内和独立页面(遗留代码)上都使用了这个帮助函数。

回溯+导出代码在独立页面中工作正常,但在CodeIgniter中打印(部分)结果到屏幕。它实际上只是在切断线的中间之前打印了前两条迹线。

当我没有回显整个回溯时,我只打印了line,file,fn和args,一切正常。

我的猜测是,来自回溯的过多递归(通过CI对象行进)会导致内存耗尽,从而导致它将结果吐出来进行屏幕显示。