成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

教你如何使用gdb調試php!

本文給大家介紹關于如何使用gdb調試php(gdb 是c語言的代碼調試工具,可以用來調試php、python、mysql等),希望對需要的朋友有所幫助!

簡介

gdb 是c語言的代碼調試工具
可以用來調試php、python、mysql等

調試主要有4種形式

gdb:啟動之后用attach pid 追蹤程序 gdb [options] [executable-file [core-file or process-id]] gdb [options] --args executable-file [inferior-arguments ...] gdb [options] [--python|-P] script-file [script-arguments ...]

常用調試命令

attach pid

例:如果向跟蹤調試mysql代碼
1.先找到mysql進行ID:10111
教你如何使用gdb調試php!

2.再attach 10111追蹤mysql

layout

顯示源碼/匯編指令

Layout names are:    src      : Displays source and command windows. 顯示源碼    asm      : Displays disassembly    and command windows. 顯示匯編指令    split : Displays source, disassembly    and command windows. 顯示源碼和匯編指令    regs     : Displays register window. If    existing layout               is source/command or    assembly/command, the                register window is displayed. If the               source/assembly/command (split) is displayed,                the register    window is displayed with                the window that has current logical focus

break

  • b 增加斷點
  • info b 顯示斷點信息
  • delete num 刪除指定斷點

continue [num]

  • c num 執行到num個斷點,num可以不填默認=1

next [num]

  • n num 執行到下num行,num可以不填默認=1,不進入函數內部

step [num]

  • s num 執行到下num行,num可以不填默認=1,不進入函數內部

backtrace

  • bt 查看當前調用棧

print [value]

  • p value 打印變量信息

help

  • help layout 查看命令如何使用

調試php代碼

1. 新增一個php文件

<?php echo date('Y-m-d', strtotime("last day of +2month", strtotime('2020-05-31')));

2.查看php-fpm work進程PID

我這里通過修改php-fpm配置只啟動一個work進程方便追蹤

pm = static pm.max_children = 1
[root@test ~]# ps aux|grep php-fpm www        1127  0.0  0.1 279352  2816 ?        S    5月12   0:00 php-fpm: pool www root      12224  0.0  0.0 112736   976 pts/0    S+   17:37   0:00 grep --color=auto php-fpm

3.追蹤PID

[root@test ~]# gdb GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-115.el7 Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.  Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-redhat-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>. (gdb) attach 1127 Attaching to process 1127 Reading symbols from /usr/local/php/sbin/php-fpm...done. Reading symbols from /usr/lib64/libcrypt.so.1...Reading symbols  from /usr/lib/debug/usr/lib64/libcrypt-2.17.so.debug...done. done.

4.打斷點,這里在timelib_update_tsdo_years方法打了一個斷點,這里需要你看下php源碼,看你需要在哪里調試代碼

(gdb) b timelib_update_ts Breakpoint 1 at 0x48ba90: file /opt/lnmp1.6/src/php-7.3.11/ext/date/lib/tm2unixtime.c, line 499.
(gdb) b do_years `Breakpoint 3 at 0x48bb95: file /opt/lnmp1.6/src/php-7.3.11/ext/date/lib/tm2unixtime.c, line 381.`

5.請求測試文件

請求之后發現沒有立刻看到返回結果,被阻塞在了這里,說明執行到了斷點的地方

[root@test ~]# curl localhost/3.php

6.查看調試信息

通過p *time可以看到變量time里面的內容

(gdb) c Continuing.  Breakpoint 1, timelib_update_ts (time=time@entry=0x7fc63ec02000, tzi=tzi@entry=0x7fc63ec75000)  at /opt/lnmp1.6/src/php-7.3.11/ext/date/lib/tm2unixtime.c:499 499    { (gdb) c Continuing.  Breakpoint 3, timelib_update_ts (time=time@entry=0x7fc63ec02000, tzi=tzi@entry=0x7fc63ec75000)  at /opt/lnmp1.6/src/php-7.3.11/ext/date/lib/tm2unixtime.c:505 505        res += do_years(time->y); (gdb) s do_years (year=2020) at /opt/lnmp1.6/src/php-7.3.11/ext/date/lib/tm2unixtime.c:381 381        eras = (year - 1970) / 40000; (gdb) s timelib_update_ts (time=time@entry=0x7fc63ec02000, tzi=tzi@entry=0x7fc63ec75000)  at /opt/lnmp1.6/src/php-7.3.11/ext/date/lib/tm2unixtime.c:504 504        do_adjust_special(time); (gdb) p *time $1 = {y = 2020, m = 7, d = 31, h = 0, i = 0, s = 0, us = 0, z = 28800, tz_abbr = 0x7fc63ec71018 "CST",  tz_info = 0x7fc63ec75000, dst = 0, relative = {y = 0, m = 2,      d = 0, h = 0, i = 0, s = 0, us = 0, weekday = 0, weekday_behavior = 0, first_last_day_of = 2, invert = 0,      days = -99999, special = {type = 0, amount = 0},      have_weekday_relative = 0, have_special_relative = 0}, sse = 0, have_time = 0, have_date = 0, have_zone = 0,      have_relative = 1, have_weeknr_day = 0,    sse_uptodate = 0, tim_uptodate = 0, is_localtime = 1, zone_type = 3} (gdb)

下面是do_years方法的代碼

static timelib_sll do_years(timelib_sll year) {     timelib_sll i;     timelib_sll res = 0;     timelib_sll eras;      eras = (year - 1970) / 40000;     if (eras != 0) {         year = year - (eras * 40000);         res += (SECS_PER_ERA * eras * 100);     }          if (year >= 1970) {         for (i = year - 1; i >= 1970; i--) {             //判斷是否是閏年,閏年366天,平年365天             if (timelib_is_leap(i)) {                 res += (DAYS_PER_LYEAR * SECS_PER_DAY);             } else {                 res += (DAYS_PER_YEAR * SECS_PER_DAY);             }         }     } else {         for (i = 1969; i >= year; i--) {             if (timelib_is_leap(i)) {                 res -= (DAYS_PER_LYEAR * SECS_PER_DAY);             } else {                 res -= (DAYS_PER_YEAR * SECS_PER_DAY);             }         }     }     return res; }

總結

通過gdb追蹤很方便我們debug代碼信息,查看底層代碼跳用棧,對學習源碼有很大的幫助
這里也總結下php strtotime方法的實現邏輯
如果當前年>=1970,則循環判斷[1970-(當前年-1)]中每一年是否是閏年,是閏年則86400366,不是則86400355 (86400是一天的秒數),月天時分秒計算邏輯不再累述,最后還會加上/減去時區,上海是東八區會減去8小時。
東八區(UTC/GMT+08:00)是比世界協調時間(UTC)/格林尼治時間(GMT)快8小時的時區,
附php代碼實現年轉化成時間戳

<?php  const YEARLEEP = 366;//閏年366天 const YEAR     = 365;//平年365天  //判斷是否是閏年 function is_leap($year) {     return ($year % 4 == 0) && ($year % 100 != 0 || $year % 400 == 0); }  //將年轉換成時間戳 function getStime($year) {     $res = 0;     for ($i = $year - 1; $i >= 1970; $i--) {         if (is_leap($i)) {             $res += YEARLEEP * 86400;         } else {             $res += YEAR * 86400;         }     }     //上海是東八區要減8小時     $res -= 8 * 3600;     return $res; }  echo getStime('2020');

推薦學習:《PHP視頻教程》

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
高潮到不停喷水的免费视频| 国产精品无码2021在线观看| 第一次接20厘米得黑人活| 夫妇联欢会回不去的夜晚9集| 国产成人无码精品久久二区三区 | 亚洲AV永久精品无码桃色| 亚洲AV日韩综合一区久热| 亚洲男人AV天堂午夜在| 最新国产成人无码久久| 芭乐小猪幸福宝丝瓜草莓官网| 大学生被内谢粉嫩无套| 国产日产精品_国产精品毛片| 精品动漫一区二区无遮挡| 乱辈通奷ⅩXXXXHD| XXXX性BBBB欧美| 村长用力挺进她的花苞啥电视 | 狠狠色噜噜狠狠狠7777米奇| 久久五月丁香中文字幕| 欧美日韩午夜群交多人轮换| 色综合久久久久综合体桃花网| 无码中文字幕VA精品影院| 亚洲日韩成人AV无码网站| 2020国产亚洲美女精品久久久| 成年黄网站18禁免费观看一区| 约附近的寂寞妇女| 锕锕锕锕锕锕锕好疼JK| 国产精品欧美福利久久| 久久国产精品免费一区二区三区| 欧美成人精品手机在线| 少妇饥渴XXHD麻豆XXHD?| 亚洲AV怡红院AV男人的天堂 | 久久亚洲精品无码AⅤ大香| 人妻色欲AV无码专区精油按摩| 无码人妻精品一区二区三区99不卡 | 美女内射在线观看| 色婷婷AV一区二区三区在线观看| 亚洲AV无码专区国产乱码京东传| 中日大胆裸体棚拍人体| 肥熟老熟妇500部视频| 黄到让你下面湿的视频| 欧美精产国品一二三类产品| 无码专区 人妻系列 在线| 在线亚洲97SE亚洲综合在线| 丰满少妇被猛烈进AV毛片| 精品无码人妻一区二区三区| 全部孕妇毛片丰满孕妇孕交| 性欧美丰满熟妇XXXX性| 玩弄人妻热妇性色Av少妇| 野花香视频在线观看免费高清版| 宝宝把腿抬起来靠墙上C| 国产亚洲AV☆浪潮在线观看| 蜜桃Av噜噜一区二区三区绯色 | 成年女人毛片视频免费| 娇喘潮喷抽搐高潮在线视频| 青梅被从小摸到大H补课1视频| 亚洲AV无码无在线观看红杏| FREE俄罗斯免费视频| 国内精品视频一区二区三区八戒 | 91人人妻人人澡人人爽人人精品| 国产精品毛片完整版视频| 妺妺窝人体色WWW国产馆在线| 色诱久久久久综合网YWWW| 一边喘气一边说疼的视频| 国产成人精品一区二三区| 美女裸露双奶头尿口无遮挡网站 | 18级成人毛片免费观看| 国产午夜精品一区二区| 欧美一区二区放荡人妇| 亚洲乱理伦片在线观看中字| 成人无码A级毛片免费| 久久水蜜桃亚洲AV无码精品麻豆| 蜜臀AV无码国产精品色午夜麻豆| 无码国产激情在线观看| CHINA熟妇老熟女HD| 精品人妻VA出轨中文字幕| 色噜噜噜狠狠色一色伊人蜜桃| 影音先锋AV天堂| 国产午睡沙发系列大全| 日本丰满岳乱妇在线观看| 越南少妇毛茸茸的大BBW| 国产亚洲一区二区手机在线观看| 日本COSME大赏美白| 中国老太婆XXXXX| 国色天香一卡2卡3卡4卡| 色多多WWW视频在线观看免费| 中文天堂网在线最新版| 国色天香网WWW在线观看| 日日摸夜夜添夜夜添无码| 18精品久久久无码午夜福利| 精品无码国产自产野外拍在线| 天堂资源中文最新版在线一区| H无遮挡H无码黄3D漫画| 久久婷婷五月综合成人D啪| 亚洲 成人 无码 在线观看| 成人永久免费福利视频免费| 男女爽到高潮的免费网站| 狠狠色综合7777久夜色撩人| 欧美激情000ⅩXX同性| 亚洲中文字幕日产无码| 国产熟女老妇300部MP4| 日日摸夜夜添夜夜添影院| 69SEX久久精品国产麻豆| 久久精品中文騷妇女内射| 亚洲AV无码国产一区二区三区四 | 精品国产YW在线观看| 天堂AV男人在线播放| 宝宝腿趴开一点就不会疼的原因 | 娇喘潮喷抽搐高潮在线观看视频 | 国产中年熟女高潮大集合| 四虎AV永久在线精品免费观看| 饱满的乳被揉捏玩弄| 男女交性视频无遮挡全过程 | 性欧美ⅩXX1819内谢| 国产成人亚洲精品无码高潮| 色妞色视频一区二区三区四区 | 曰本女人牲交全视频播放毛片| 精品久久久久久久久久久AⅤ | 牲欲强的熟妇农村老妇女视频 | 尤物在线视频.YW163.成年| 久久精品国产亚洲AV香蕉| 亚洲精品无码国产| 极品少妇被猛得白浆直流草莓| 无码中文国产不卡视频| 国产精品久久久久久久久电影网 | 国产精品无码无片在线观看| 丝袜国偷自产中文字幕| 国产69精品久久久久99尤物| 色8激情欧美成人久久综合电| 被C了一节课的林妙妙| 人与禽性7777777| 草莓 丝瓜 香蕉 向日葵 榴莲| 人妻人人澡人人添人人爽人人玩 | 中文字幕亚洲乱码熟女一区二区 | 99久久免费只有精品国产| 女人自熨全过程直播| 99久久国产福利自产拍| 欧美人与禽ZOZZO| 爱丫爱丫影院在线观看视频| 青青青国产精品一区二区 | 一区二区三区精品视频免费播放| 久久久久国色AV∨免费看| 艳妇乳肉豪妇荡乳ⅩXXO电影| 久久中文字幕无码专区| 中文字幕人成乱码熟女免费| 嫩草欧美曰韩国产大片| 天天澡夜夜澡人人澡| 国产精品99久久精品爆乳| 五十路六十路七十路熟婆| 韩国av一区二区| 亚洲精品无码不卡AV| 久久亚洲春色中文字幕久久久 | 城中村勾搭老熟女啪啪| 少妇午夜福利一区二区| 国产美女裸体无遮挡免费视频| 亚洲AV无码久久精品色欲| 久久AⅤ无码AV高潮AV喷吹| 曰韩欧美群交P片内射| 欧美黑人成人www在线观看| 差差漫画在线观看登录页面弹窗| 手机看片福利永久| 国产午夜精品一区二区三区极品 | 蜜臀AV免费一区二区三区| FREESEX欧美喷水| 骚片AV蜜桃精品一区| 国产无人区一码二码三码MBA| 亚洲精品无码久久久久AV老牛| 久久亚洲AV成人无码电影| HENNESSY女RAPPER| 特大黑人巨交吊性XXXX| 狠狠躁日日躁夜夜躁2020| 找老女人泻火对白自拍| 人妻无码中文字幕永久有效视频 | 成年女美黄网站大全免费播放| 无码AV免费一区二区三区四区 | 亚洲精品无码专区久久同性男| 蜜桃AV不卡无码三区| 成人国成人国产SUV| 性色ΑV一二三天美传媒| 久久免费的精品国产V∧| JULIA无码中文字幕一区| 少妇久久久久久被弄高潮| 狠狠色噜噜狠狠狠888米奇| 中文字幕人妻三级中文无码视频| 日韩免费高清大片在线| 国内精品久久久久影院优| 一二三四免费观看在线电影二 | 波多野结衣的AV电影| 五月丁香国产在线视频| 久久中文骚妇内射| 东北老熟女对白XXXⅩHD| 亚洲国产精品成人网址天堂 | 99西方37大但人文艺术| 天堂√中文最新版在线| 久久精品国产亚洲AV麻豆小说| らだ天堂中文在线| 亚洲AV无码国产精品久久不卡| 男人扒开女人内裤强吻桶进去| 国产精品国产精品偷麻豆| 在线观看韩国电影| 偷玩朋友熟睡人妻|