对于多进程架构的程序,如服务器程序nginx和php-fpm等,调试子进程需要用到调试器的attach功能。
下面以Clion和php-fpm为例,调试步骤如下,其他编辑器/IDE和程序可以作为参考:
- 首先,需要将程序的worker子进程数量调成固定的1个,以便请求/任务被调度到固定的进程,php-fpm的调整如下:
# File: etc/php-fpm.d/www.conf
pm = static
pm.max_children = 1
- 设置内核参数:
sudo sysctl kernel.yama.ptrace_scope=0
若不设置这个参数会有以下的报错:
com.jetbrains.cidr.execution.debugger.backend.gdb.GDBDriver$GDBCommandException: ptrace: 不允许的操作.
Debugger detached
- 启动程序,最好使用本用户来启动:
php-fpm启动
- 点击Clion的菜单"Run -> Attach to Process",或者使用快捷键Ctrl+Alt+5,来启动Attach界面,筛选进程名字,选择子进程:
Attach界面
- 在Clion上打上调试断点,然后用Postman等工具做请求,就可以看到调试器进入到相应的位置了:
调试