平常你們怎麼列印sql語句的?
在框架中使用框架提供的騷方法列印,或是直接echo/print,在本地開發或是在測試機上開發這樣好像可以,粗暴又騷,可是在公司的生產線上呢?你直接修改生產線上的程式碼直接列印?哦,搞個日誌或是生成檔案,但是你還是還要動程式碼!!!我就不想動人家的程式碼,動人家的東西是不禮貌的!!!要是動壞了,你就就回家了^_^
你的方法可能如下
- 程式碼中除錯echo/print/框架提供的方法寫大堆
- 裝一堆工具
- 寫一堆程式碼
- git上找一堆工具或是百度找一堆工具安裝大半天
- 群裡問人家怎麼檢視sql語句啊,人家不回答就說人家小氣,說人家不關心他,不幫他^_^。
如果你接手人家的專案,你也動人家的伺服器,你也動人家的程式碼,有可能動壞了。下面是我工作中經常除錯程式碼的一些小騷法,當然此法可舉一反三用在許多場景中,比如檢視程式執行情況,檢視swoole執行情況,檢視框架執行情況,檢視資料庫執行等。
除錯環境如下
centos8【不會使用windows伺服器,也不喜歡,除錯難度跟原子彈一樣難,不推薦!】
php7
swoole4.x
mysql8
我們藉助強大的strace工具【不清楚的具體百度】
測試原始碼 //直接複製swoole示例原始碼
假設你用別人基於swoole擼的騷框架【我直接複製swoole example下的東西了,反正道理都一樣】$key_dir = dirname(dirname(__DIR__)) . '/tests/ssl'; $http = new swoole_http_server("0.0.0.0", 9501); $http->set([ 'worker_num' => 1, ]); $http->listen('127.0.0.1', 9502, SWOOLE_SOCK_TCP); $http->on('request', function ($req, $resp) { $uri = $req->server['request_uri']; $swoole_mysql = new Swoole\Coroutine\MySQL(); $swoole_mysql->connect([ 'host' => '127.0.0.1', 'port' => 3306, 'user' => 'root', 'password' => 'pwd', 'database' => 'test', ]); $res = $swoole_mysql->query('select * from user'); $resp->write(josn_encode($res)); }); $http->on('finish', function () { echo "task finish"; }); $http->on('task', function () { echo "async task\n"; }); $http->on('close', function(){ echo "on close\n"; }); $http->on('workerStart', function ($serv, $id) { //var_dump($serv); }); $http->start();
響應結果
swoole服務程式關係
8475:
8476
mysql8程式關係
mysql程式接受sql語句
長語句測試和錯誤返回
超長sql語句測試【可以指定引數長度的】
worker程式接受瀏覽器請求+連線資料庫+響應請求+關閉資料庫的過程
其它方法
tcpdump工具
開啟sql日誌除錯功能
本作品採用《CC 協議》,轉載必須註明作者和本文連結