调试提速:5种冷门但高频的异常定位技巧
刚遇到个诡异的案例:插件在用户表查询时随机报"Trying to get property of non-object",最终发现是$wpdb->get_row()返回null时没做类型判断。分享几个非常规但实用的调试技巧:
1. 日志染色法
在error_log()输出前后添加"\033[31m"和"\033[0m"实现终端颜色标记,比如:
error_log("\033[31mDEBUG: ".print_r($data,true)."\033[0m");
红色日志在密密麻麻的调试输出中特别显眼
2. 临时Hook监听器
在报错位置前添加:
add_action('all', function($hook){
if(strpos($hook,'your_plugin')!==false)
error_log("HOOK FIRED: ".$hook);
});
可以捕获所有当前插件触发的钩子执行顺序
3. 异常堆栈截断
遇到超长堆栈时,在wp-config.php添加:
ini_set('xdebug.var_display_max_depth', 3);
限制var_dump的递归深度,避免浏览器卡死
4. SQL日志补丁
临时修改wp-db.php的query方法,记录所有执行语句:
file_put_contents(ABSPATH.'sql.log', $query."\n", FILE_APPEND);
5. 内存快照对比
在疑似内存泄漏的位置插入:
error_log('MEM: '.memory_get_usage().' peak:'.memory_get_peak_usage());
通过差值定位异常增长点

