教训与启发
有的时候做一件事就不能为了快速到达目的而盲目的横冲直撞
做了一个ctfshow西瓜杯tpdoor的题目,是thinkphp框架, 想要调试一下, 于是下载了xdebug, 但是怎么也调试不了, 然后直接照着别人的浏览器一个一个的试(现在想起来感觉好愚蠢),试到头晕眼花也没搞成.
从图书馆会宿舍的路上静下心来想了想, 把事情梳理了一遍, 觉得如果先学习一下xdebug调试php代码的原理说不定事情就解决了,其实一点也不复杂.
vscode调试thinkphp项目
朴素理解, 未必准确
xdebug是php的扩展, 执行php代码的时候会被激活, 在断点处停下, 并从指定端口尝试连接IDE
vscode中的phpdebug扩展, 监听launch.json中定义的端口, 接受xdebug传递的信息以进行调试
因此配置好之后, 使用php think run运行php服务, 再F5监听端口即可.
这里的调试和本机直接调试不同, 调试并不立即执行代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| ``` [xdebug] zend_extension=D:/phpstudy/phpstudy_pro/Extensions/php/php8.2.9nts/ext/php_xdebug.dll xdebug.collect_params=1 xdebug.collect_return=1 xdebug.auto_trace=Off xdebug.output_dir="D:/phpstudy/phpstudy_pro/Extensions/php_log/php8.2.9nts.xdebug.trace" xdebug.profiler_enable=Off xdebug.remote_enable=Off xdebug.client_host=localhost xdebug.client_port=9003 xdebug.log="D:\xdebug_log" xdebug.mode = debug xdebug.start_with_request=yes xdebug.remote_handler=dbgp
|
launch.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| { "version": "0.2.0", "configurations": [ { "name": "Debug ThinkPHP", "type": "php", "request": "launch", "port": 9003, "pathMappings": { "D:/code/test/tp/public": "${workspaceFolder}/public", "D:/code/test/tp/app" : "${workspaceFolder}/app" } } ] }
|
当服务器与本地路径不一致时,需通过映射让 IDE 正确关联断点
(比如WSL中运行服务, IDE在主机上运行)