2010-04-13 63 views

回答

2

發送以下$味精:

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

沒有測試,但是這是一種方式。

+0

我想你已經有了一個額外的尾隨括號。 – siliconrockstar 2017-07-26 16:31:32

+1

@siliconrockstar你的想法是正確的。謝謝。 – zaf 2017-07-27 17:09:50

2

debug_backtrace返回數組,但並不打印。處理報告電子郵件的代碼可能有問題。你能否在這裏粘貼這段代碼?

5

有一個「打印出陣列」的功能,debug_print_backtrace。你沒有把這兩個混在一起嗎?
默認情況下,var_export()和print_r()都會打印結果。你必須通過true作爲第二個參數,如果你想讓他們返回結果(所以你可以將它分配給一個變量)

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

調試回溯返回一個數組,所以你可以像任何陣列處理。例如:

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

然後您可以發送電子郵件給自己的日誌行。

0

我知道這是舊的,但我發現自己也有同樣的問題。我無法確認100%,但它很可能與內存不足錯誤有關。

我的場景 - 在第三方提交失敗時,發送一封包含調試信息的電子郵件(即代碼失敗的地方)。我也將$trace = debug_backtrace()保存到一個變量中,然後使用var_export($trace, true)將它嵌入到電子郵件中。我在CodeIgniter框架和獨立頁面(遺留代碼)內都使用了這個幫助函數。

回溯+導出代碼在獨立頁面中工作正常,但在CodeIgniter中打印(部分)結果到屏幕。它實際上只在打印線的中間纔打印前兩條曲線。

當我只打印行,文件,fn和參數,而不是回顯整個backtrace時,一切正常。

我的猜測是,從回溯(通過CI對象前進)過多的遞歸會消耗內存,從而導致它嘔吐結果進行篩選。

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);