使用GDB調(diào)試PHP代碼,解決PHP代碼死循環(huán)問題(2)_PHP教程
推薦:Laravel5中contracts詳解在Laravel5中出現(xiàn)了一個(gè)新的東西,叫做contracts,那么它到底是什么?有什么用?怎么用?我們就來探討下吧。 我們先來看看官方文檔中對contracts的定義: Laravel's Contracts are a set of interfaces that define the core services provided by the framework. 意思
代碼如下:
(gdb) f 6
#6 0x000000000093b5fd in execute (op_array=0x21d58b0) at /home/htf/workspace/php-5.4.27/Zend/zend_vm_execute.h:410
410 if ((ret = OPLINE->handler(execute_data TSRMLS_CC)) > 0) {
(gdb) p *op_array
$2 = {type = 2 '\002', function_name = 0x7f726d086540 "test", scope = 0x0, fn_flags = 134217728, prototype = 0x0, num_args = 2, required_num_args = 2, arg_info = 0x7f726d086bd8,
refcount = 0x7f726d0870f0, opcodes = 0x7f726424d600, last = 8, vars = 0x7f726424e890, last_var = 2, T = 1, brk_cont_array = 0x0, last_brk_cont = 0, try_catch_array = 0x0,
last_try_catch = 0, static_variables = 0x0, this_var = 4294967295, filename = 0x7f726424ba38 "/home/htf/wwwroot/include.php", line_start = 12, line_end = 15, doc_comment = 0x0,
doc_comment_len = 0, early_binding = 4294967295, literals = 0x7f726424eae0, last_literal = 4, run_time_cache = 0x7f726450bfb0, last_cache_slot = 1, reserved = {0x0, 0x0, 0x0, 0x0}}
這里的filename就能看到op_array是哪個(gè)PHP文件的。然后輸入f 0進(jìn)入當(dāng)前位置。
代碼如下:
(gdb) p **executor_globals.opline_ptr
$4 = {handler = 0x93ff9c , op1 = {constant = 1680133296, var = 1680133296, num = 1680133296, hash = 140129283132592, opline_num = 1680133296,
jmp_addr = 0x7f726424ccb0, zv = 0x7f726424ccb0, literal = 0x7f726424ccb0, ptr = 0x7f726424ccb0}, op2 = {constant = 0, var = 0, num = 0, hash = 0, opline_num = 0, jmp_addr = 0x0,
zv = 0x0, literal = 0x0, ptr = 0x0}, result = {constant = 32, var = 32, num = 32, hash = 32, opline_num = 32, jmp_addr = 0x20, zv = 0x20, literal = 0x20, ptr = 0x20},
extended_value = 1, lineno = 5, opcode = 60 '
這里的lineno表示OPCODE所在的代碼行數(shù),可以到對應(yīng)文件里去看下是哪行代碼。使用GDB可以查看到更多的信息,這里就不再一一介紹了,有興趣各位可以自行嘗試。
zbacktrace的使用
zend官方提供了一個(gè)gdb的腳本,對指令進(jìn)行了封裝,可以直接看到php函數(shù)的調(diào)用關(guān)系。在php源代碼包的根目錄中有一個(gè).gdbinit。使用
代碼如下:
source your_php_src_path/.gdbinit
zbacktrace
可以直接看到PHP函數(shù)的調(diào)用堆棧。
以上就是本文的全部內(nèi)容了,希望大家能夠喜歡。
分享:php打印一個(gè)邊長為N的實(shí)心和空心菱型的方法這篇文章主要介紹了php打印一個(gè)邊長為N的實(shí)心和空心菱型的方法,實(shí)例分析了php循環(huán)語句繪制圖形的技巧,需要的朋友可以參考下 本文實(shí)例講述了php打印一個(gè)邊長為N的實(shí)心和空心菱型的方法。分享給大家供大家參考。具體分析如下: 實(shí)心菱型計(jì)算方法: $n:邊長 $i:當(dāng)前行,0
PHP教程Rss訂閱編程教程搜索
PHP教程推薦
- 小結(jié):PHP動(dòng)態(tài)網(wǎng)頁程序兩個(gè)有用的小技巧
- 揭秘從IIS的ASP遷移到APACHE的PHP
- 利用Apache實(shí)現(xiàn)禁止圖片盜鏈
- PHP讀取Excel 之 Spreadsheet_Excel_Reader
- php pdo連接報(bào)錯(cuò)Connection failed: SQLSTATE[HY000] [2002]
- php獲取本地圖片文件并生成xml文件輸出具體思路
- 解析linux下php實(shí)現(xiàn)C/C 擴(kuò)展編程
- 談PHP中漢字替換與模式匹配的問題
- 分享一則PHP定義函數(shù)代碼
- php簡單縮略圖類|image.class.php
- 相關(guān)鏈接:
- 教程說明:
PHP教程-使用GDB調(diào)試PHP代碼,解決PHP代碼死循環(huán)問題(2)
。