暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

谈谈后端同学日常DeBug的方式方法

牧码人日记 2021-06-29
940

写bug和解决bug是开发同学的日常迭代生活,今天主要聊聊php中遇到的问题和通用的解决方案和思路。

阿泽


如果说开发占据了一半时间,那么调试就占据了另一半时间,

遇到问题的时候,第一时间就是用正确的方式debug
,比如断点,比如查看日志,比如其他调试方法.

熟练的调试是发现和解决问题的最有效的方法,反之,如果代码调试的能力一般会极大的影响开发效率,造成不必要的时间浪费等。

常用调试函数

    <?php
    //echo函数可以同时输出多个字符串,带多个参数,没有返回值
    echo "good day";


    //halt 打印调试信息,用于字符串和数组,自动断点
    $str = 'are you ok?';
    halt($str);


    var_dump();等 这里不再一一赘述


    分析程序调试中常出现的问题和对应解决方法(这里以lnmp环境为例)不考虑环境因素以外的问题


      <?php
      //1、首先中英文大小写问题,在程序中很常见也是很容易出现的错误
      $a和$A是不一样的。
      //2、字段类型不一致或 某个方法有类型约束,长度问题
      mysql中a表字段 age为 int 10
      php中 插入a表该字段
      $age =['1'=>'23','2'=>'34']
      Db::table('a')->inset($age);
      这个搞清楚数据库存的类型和要插入的参数类型,整型是存不进字符串和数组的。建议看看php的八大数据类型和mysql的字段类型
      还有长度问题,超过10位的数字也会存不进去,根据实际情况调配 长度
      //3、端口 代码位置  开发、测试、生产环境
      debug的代码首先搞清楚某个环境去调试,其次确认相应环境下的域名或ip的端口,比如常用80,测试用的8080


      //4、跨域问题 -解决方法 一般都在中间件路由的行为上解决了
      header("Access-Control-Allow-Origin:*");
      header('Access-Control-Allow-Methods:GET,POST, OPTIONS, PUT, PATCH, DELETE');
      header('Access-Control-Allow-Headers:Origin, Content-Type, X-CSRF-TOKEN, Cookie, X-Requested-With, Accept, token,Authorization, X-XSRF-TOKEN,Access-Token');
      header('Access-Control-Expose-Headers:*');
      header('Access-Control-Allow-Credentials:true');
      //5、路由问题-传输方式-传输参数问题导致
      Route::get('/', 'login/index');
      Route::post('test', 'login/test');
      Route::any('map', 'login/map');
      搞清楚get post any传输方式 以及相应参数。确认相应方法允许传的方式
      //6.404 502 504 500 403 等问题
      通常来说5开头都是服务端问题。
      404 403 可能是页面不存在或者ip被限制了,无法打开网站页面,nginx伪静态问题
      //7、服务器配置 PHP版本 PHP扩展
      查看nginx redis 配置是否正确,查看框架的config文件中的配置
      php_opessl php_fileinfo php_redis等是否开启,php低版本高版本代码写法问题
      //8、目录权限问题 -常见于日志-上传图片等问题失败导致的
      chmod 777 file     //在linux中或宝塔中给相应目录读写权限7555或777最高权限
      //9、代码错误,变量未声明或命名空间等问题导致
      $redis = new redis();//未找到该方法,
      $resid->set('this is key',$new_key);//并不存在$new_key
      //10、打印sql语句看执行语句解决问题
      常用的有$Db->getLastSql(); ->fetchsql();等
      实在不行看runtime中的执行语句把
      //11、逻辑问题考虑实际需求和代码数据库映射关系编写的问题去想办法解决,也是最难发现的bug。


      分享debug个人方法解决思路


        <?php
        1.尽量使用系统框架内置的方法或函数解决问题,根据特定需求可使用三方依赖包解决业务场景带来其他的需要
        2.版本问题,多看相应官方文档,寻求最稳定可靠,或者最新的版本消灭问题(前提是东西可以跑起来)
        3.会搜索或查询解决办法(百度 谷歌等) site or "" 掌握百度相关搜索引擎的方法,精准查询内容
        4.不重复造轮子,比如某个方法,某个正则等。考虑实际情况进行复用。
        baidu.com google.com 翻墙


        5.多打断点-日志,运行某一段代码查看异常问题。好定位分析问题。
        var_dump();等 file_put_contents('data.txt',$str);等


        6.在PHP中sql更新尽量使用事务进行。保证数据一致性
        // 启动事务
        Db::startTrans();
        try {
        Db::table('think_user')->find(1);
        Db::table('think_user')->delete(1);
        throw new Exception('添加商品规格失败', 1);
        // 提交事务
        Db::commit();
        } catch (\Exception $e) {
        // 回滚事务
        Db::rollback();
        }


        7.其他情况 根据公司内部开发规范确定,比如 加密解密 配置和工具上的一些问题导致
        8.多使用isset() empty() 三元运算符 ,可以避免很多小问题出现。(参数不严谨,类型不对等问题哦)


        好啦,暂时想到的就这些,以后不定时再做记录~~



        文章转载自牧码人日记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论