成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院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號
猫咪成人网站WWW永久网站| 末发育娇小性色XXXXX| 久久亚洲AV永久无码精品| 久久香蕉综合色一综合色88| 美女露 0的奶头无| 欧美综合自拍亚洲综合图片区| 日本强伦姧人妻一区二区| 天天爽天天爽夜夜爽毛片 | 国产成人无码精品XXXX网站| 国产尤物精品视频| 久久久久亚洲AV成人片| 欧洲精品VA无码一区二区三区| 少妇高潮一区二区三区99| 亚洲AV日韩AV一区谷露| 永久AV狼友网站在线观看| YW尤物无码点击进入| 国产边做饭边被躁在线小说| 国内老熟妇乱子伦视频| 老师粉嫩小泬喷水视频90| 人善交VIDEOS欧美3D| 性刺激性色爽爱小说| 永久免费看啪啪网址入口| 成 人 黄 色 网 站 18| 国模无码一区二区三区不卡| 麻豆传播媒体2023最新网站 | 女的用嘴巴吃鸡会得HPV| 色哟哟网站在线观看| 亚洲精品国产第一综合99久久| 97人伦影院A级毛片| 父母儿女一家换着玩的文案| 精品成在人线AV无码免费看| 欧美人与动牲交免费观看视频| 我妈妈的朋友8在完整有限中字木| 亚洲色大成网站WWW在线| TOUGHTESTED硬汉系列| 国产偷窥熟女精品视频| 乱VODAFONEWIFI熟妇| 熟婦久久无码人妻av蜜臀| 亚洲熟妇少妇任你躁在线观看| 波多野42部无码喷潮在线| 果冻传媒一区二区天美传媒| 欧美丰满少妇人妻精品| 香蕉久久夜色精品升级完成| 69日本人XXXX16-18| 国产精品亚洲А∨天堂免下载| 鲁鲁网亚洲站内射污| 少妇白浆高潮无码免费区| 艳妇乳肉豪妇荡乳AV无码福利| 成本人H无码播放私人影院| 娇妻呻吟黑人又粗又大视频| 人妻体内射精一区二区三四| 亚洲精品天天影视综合网| 成年女人A级毛片免费观看| 精品水蜜桃久久久久久久| 日日摸日日碰夜夜爽无| 夜夜揉揉日日人人青青| 国产成人精品久久一区二区| 门徒电影高清完整版在线观看| 无码免费一区二区三区| 97色精品视频在线观看| 豪妇荡乳1一5潘金莲2在线| 欧美一卡二卡三卡四卡视| 亚洲人成人无码WWW| 国产SM残忍打屁股调教视频| 麻豆国产精品VA在线观看不卡| 无码人妻精品一区二区三区99不卡 | 粉嫩AV一区二区夜夜嗨| 蜜桃视频一区二区| 亚洲AV无码一区二区三区在线 | 偷窥熟女大屁股对白视频| 97日日碰人人模人人澡| 精品久久久久久无码免费| 色哟哟免费精品网站入口| 做AJ的视频大全电视剧| 狠狠色噜噜狠狠狠777米奇 | 欧美xxxxx久久短视频| 亚洲精品国自产拍在线观看| 隔壁人妻被水电工征服| 欧美交换配乱婬粗大| 野花韩国高清免费神马百度| 国产亚洲精久久久久久无码| 色婷婷精品亚洲AⅤ| 91人妻人人澡人爽人精品| 精品久久久久久中文字幕大豆网 | 黑巨人的又黑又大又长| 少妇被粗大的猛烈进出96影院| 97SE亚洲国产综合自在线尤物| 久久国产成人午夜AV影院| 亚洲 另类 日韩 制服 无码| 夫妇交换性三中文字幕 | 啊灬啊灬啊灬快灬高潮了女| 邻居少妇张开双腿让我爽一夜| 亚洲AV综合色区无码一区| 国产精品JIZZ在线观看老狼| 日本厨房ⅩⅩⅩⅩⅩ乱| 中文字幕人妻不在线无码视频| 精品人妻无码视频一区二区三区| 午夜福利国产成人A∨在线观看 | 色妞精品AV一区二区三区| 99久久婷婷国产综合精品| 久久亚洲日韩成人无码| 亚洲精品乱码久久久久久V| 国产免费久久久久久无码| 熟妇人妻不卡中文字幕| 菠萝蜜视频APP在线观看| 欧美精产国品一二三区别| 中文字幕久精品免费视频| 久久精品中文字幕无码绿巨人| 亚洲AV无码国产精品色午夜软件| 国产精品久久久久久精品三级 | 超级黄18禁色惰网站| 欧美视频一区二区三区四区| 1000部啪啪未满十八勿入不卡| 看娇妻被两朋友共用| 一边亲着一面膜下奶韩剧| 精品人妻人人做人人爽| 亚洲成A人片在线观看WWW | 性色欲情网站IWWW| 国产精品爽爽VA在线观看| 无码精品人妻一区二区| 国产精品国产三级国产AV麻豆| 少妇高潮喷水久久久影院| 厨房掀起裙子从后面进去视频| 日本熟妇厨房XXXXX乱电影| 把腿张开老子臊烂h视频| 人人妻人人澡人人爽欧美二区| А√天堂资源地址在线下载| 人妻丰满熟妇av无码久久洗澡| Z0OZO0人善之交另类| 欧美性猛交XXXX免费看蜜桃| AV天堂东京热无码专区| 欧美极品JIZZHD欧美| XXXX日本少妇做受| 人妻少妇伦在线无码专区视频| 把八重神子焯出白水怎么办| 日本免码VA在线看免费最新| 吃瓜网51CG7爆料| 少妇被躁爽到高潮无码文| 国产成人亚洲精品无码影院BT | 久久国产精品波多野结衣AV | 性色AV一区二区三区天美传媒| 国模生殖欣赏337METCN| 亚洲欧美一区二区三区| 久久天天躁狠狠躁夜夜网站| 性欧美乱妇COME | 又粗又大又黄又爽的免费视频 | 精品久久久久久久免费人妻| 亚洲一线产区二线产区区| 美女把尿口扒开让男人桶爽| AV香港经典A毛片免费观看| 人人模人人爽人人喊久久| 丰满少妇被粗大猛烈进人高清| 天天躁日日躁狠狠躁午夜剧场| 国产小视频A在线观看| 亚洲欧美韩国综合色| 蜜桃91人妻在线视频| 八戒八戒视频在线WWW观看| 熟妇啊轻点灬大JI巴太粗| 国产人成精品香港三级在线| 亚洲精品国产精品乱码不99| 老外又长又大插的太深了| 啊灬啊灬啊灬啊灬高潮了| 天美传媒MV在线看免费| 好紧我太爽了视频免费| 荫蒂添的好舒服小说短篇| 热RE99久久精品国99热| 国产激情久久久久影院老熟女| 亚洲国产成人AV在线电影播放| 六十路七十路熟女乱码| 爆乳美女午夜福利视频| 无码日韩人妻AV一区二区三区| 精品亚洲成A人片在线观看| 696969C大但人文艺术作品| 色天使色偷偷色噜噜| 好深好大再浪一点| 2021久久精品国产99国产精| 色悠久久久久综合先锋影音下载| 国产亚洲精品自在久久蜜TV| 岳潮湿的大肥梅开二度第三部最新| 欧美性色XXⅩXXA片HD| 国产精品成人永久在线四虎| 亚洲中文字幕无码中字| 人人爽人人模人人人爽人人爱| 国产三级在线观看完整版| 中国少妇的BBWWBBWW| 少妇又粗又大人妻无码| 精品视频无码一区二区三区| XXXCHINESE国产HD| 亚洲AV成人片无码www电影| 免费人成网WW555| 国产成人亚洲精品另类动态| 亚洲熟女WWW一区二区三区| 日本19禁啪啪无遮挡免费| 狠狠躁天天躁夜夜躁婷婷| BBOX撕裂BASS俄罗斯| 无码熟熟妇丰满人妻啪啪软件| 麻豆TV入口在线看| 国产福利在线 | 传媒| 制服中字人妻中字出轨中字| 卫生间被教官做好爽HH视频|