bởi Ray Naldo
Sử dụng Proxy Xdebug và DBGp

“Er, đợi một chút… Đừng chỉ sử dụng xdebug.remote_connect_back
đã được giới thiệu kể từ Xdebug 2.1?”
Chắc chắn nếu máy chủ web chỉ có thể được truy cập bởi các nhà phát triển (ví dụ như máy chủ phát triển tư nhân), và nếu nó không chạy sau tường lửa NATted, và nếu bạn muốn hướng dẫn này kết thúc tại đây. Xem những IF đó? Cá nhân tôi không thích IF trong lập trình hay trong cuộc sống. Vì vậy, hướng dẫn này sẽ đi theo con đường dài hơn mà không cần IF để bắt đầu (hoặc ít nhất là ít IF hơn), đó là bằng cách sử dụng proxy DBGp của Xdebug.
Khi proxy được sử dụng, tiện ích mở rộng PHP Xdebug không còn kết nối trực tiếp với PhpStorm mà thay vào đó kết nối với máy chủ proxy DBGp. Tất cả các nhà phát triển trong nhóm sau đó lần lượt kết nối với proxy đó. Mỗi nhà phát triển có một phiên gỡ lỗi riêng chạy trên proxy này, điều này giúp có thể thực hiện gỡ lỗi nhiều người dùng cho cùng một mã trên cùng một máy chủ.

Vì vậy, với proxy DBGp, bạn có thể giới hạn những người có thể kết nối với proxy và bạn có thể có nhiều nhà phát triển gỡ lỗi cùng một máy chủ web chạy sau tường lửa NATted.
Chạy proxy DBGp cũng cho phép bạn tránh các sự cố NAT trong đó (như đã thấy từ PHP+Xdebug trên máy chủ) tất cả các kết nối dường như đến từ cùng một IP (vì mạng nội bộ của bạn được NATted). Trong trường hợp này, bạn chỉ cần chạy proxy dbgp trên máy NAT của mình, định cấu hình
xdebug.remote_host
cài đặt thành địa chỉ IP của máy NAT của bạn và định cấu hình IDE để kết nối với proxy đang chạy tại<NAT-machine>
;:9001.
— https://derickrethans.nl/debugging-with-multiple-users.html
Cài đặt
Ánh xạ giữa các thư mục dự án và các thư mục trên máy chủ phải được thực hiện chính xác trong PhpStorm trước tiên để gỡ lỗi hoạt động.
Thiết lập máy chủ web
Mặc dù hướng dẫn này giả định rằng máy chủ web đang chạy trên Linux, nhưng hướng dẫn này cũng có thể được sử dụng trên các máy chủ web không phải Linux với những sửa đổi nhỏ.
1. Cài đặt Xdebug.
# PHP 7+pecl install xdebug # PHP 5.6.xpecl install xdebug-2.5.5
2. Bật tiện ích mở rộng Xdebug, sau đó thêm cấu hình Xdebug sau vào php.ini:
[xdebug]zend_extension="<full_path_to_xdebug.so>"
; debugger settingsxdebug.remote_enable=1xdebug.remote_host=127.0.0.1xdebug.remote_port=9000
Đối với hướng dẫn này, proxy DBGp sẽ chạy trên cùng một máy với máy chủ web và sẽ sử dụng cổng mặc định của Xdebug, do đó 127.0.0.1:9000
.
3. Tải xuống và cài đặt proxy DBGp để gỡ lỗi từ xa từ Gói gỡ lỗi từ xa Komodo, dành riêng cho hệ điều hành của máy chủ web của bạn. Hướng dẫn này sẽ sử dụng ứng dụng khách 64-bit Linux và PHP Remote Debugging v11.1.0. Trích xuất kho lưu trữ; để đơn giản, tôi trích xuất tất cả nội dung vào thư mục chính của mình, tức là /home/ray/
.
4. Chạy proxy DBGp bằng cách thực thi pydbgpproxy
tệp có tham số:
-d <ip_address:po
rt> để đặt địa chỉ IP và cổng của máy sẽ nhận kết nối trình gỡ lỗi từ máy chủ web-i <ip_address:po
rt> để đặt địa chỉ IP và cổng của máy sẽ nhận kết nối gỡ lỗi từ máy tính của nhà phát triển
Trong hướng dẫn này, máy chủ web và proxy DBGp sẽ được chạy trên cùng một máy. Nếu địa chỉ IP là 10.211.1.32
và chúng tôi muốn chạy proxy trên cổng 9001
sau đó lệnh sẽ là:
pydbgpproxy -d 127.0.0.1:9000 -i 10.211.1.32:9001
Để thuận tiện, chúng tôi có thể sử dụng tập lệnh này, được lưu dưới dạng start-dbgp-proxy.sh
.
Tôi đã đặt nó trên cùng thư mục với pydbgpproxy
I E /home/ray/start-dbgp-proxy.sh
) :
ip=$(hostname -I | awk '{$1=$1};1')pydbgpproxy -d 127.0.0.1:9000 -i $ip:9001
5. Đảm bảo cho phép kết nối từ localhost trên cổng 9000
và từ các máy của nhà phát triển trên cổng 9001
.
6. Chạy start-dbgp-proxy.sh
. Thêm quyền thực thi file nếu không chạy được.
start-dbgp-proxy.sh
Hãy chắc chắn rằng nó có thể được chạy mà không có vấn đề gì.
INFO: dbgp.proxy: starting proxy listeners. appid: 30430INFO: dbgp.proxy: dbgp listener on 127.0.0.1:9000INFO: dbgp.proxy: IDE listener on 10.211.1.32:9001
7. (Tùy chọn) Tự khởi động start-dbgp-proxy.sh
trên mỗi lần khởi động máy bằng cách sử dụng crontab.
Chỉnh sửa crontab:
crontab -e
Thêm công việc định kỳ để tự động bắt đầu start-dbgp-proxy.sh
trên mỗi lần khởi động:
@reboot /home/ray/start-dbgp-proxy.sh
Thiết lập ứng dụng khách
1. Menu truy cập Tools > DBGp Proxy > Regist
er IDE trên PhpStorm.

2. Điền IDE key
với chuỗi duy nhất giữa các nhà phát triển. Lấp đầyHost
vàPort
với địa chỉ IP và cổng của proxy DBGp (tham số -i
trên Máy chủ Thiết lập #4).

3. Bấm OK. Bạn sẽ thấy một cửa sổ bật lên thông báo thành công. Nếu không thấy đăng ký lại IDE qua Tools > DBGp Proxy > Regist
à IDE. Nếu nó không thành công hoặc bạn muốn thay đổi cấu hình, tôi cót via Tools > DBGp Proxy > Conf
hình thành…
4. (Tùy chọn) Nếu bạn muốn bắt đầu kết nối gỡ lỗi từ trình duyệt web, bạn nên cài đặt tiện ích mở rộng gỡ lỗi trên trình duyệt của mình: Trình trợ giúp Xdebug Firefox hoặc Trình trợ giúp Xdebug Chrome. Sau đó định cấu hình Trình trợ giúp Xdebug của bạn.

Trên Firefox, nhấp chuột phải vào biểu tượng Trình trợ giúp Xdebug > Quản lý tiện ích mở rộng… > Tùy chọn Trên Chrome, nhấp chuột phải vào biểu tượng Trình trợ giúp Xdebug > Tùy chọn

Điền và lưu IDE key
với cùng một chuỗi duy nhất như khi bạn đăng ký IDE (Bước #2).
bắt đầu gỡ lỗi
1. Đặt (các) điểm dừng trên PhpStorm.
2. Bắt đầu nghe kết nối gỡ lỗi trong PhpStorm bằng cách nhấp vào nút ‘điện thoại’ trên thanh công cụ phía trên bên phải hoặc từ menu Run > Start Listening for PHP Debug Connecti
tiện ích. Điều này sẽ cho phép PhpStorm phản ứng và tự động mở cửa sổ Gỡ lỗi khi phiên gỡ lỗi bắt đầu.

3. Kích hoạt trình sửa lỗi của Xdebug khi thực hiện một yêu cầu. Theo Tài liệu Xdebug có 3 cách để thực hiện việc này. Nhưng IMHO, cách tốt nhất hoạt động cho tất cả các loại phương thức HTTP là đặt cookie có tên XDEBUG_SESSION
với giá trị <IDE_k
ey> là cùng một chuỗi duy nhất khi chúng tôi đăng ký IDE của mình với proxy DBGp (Thiết lập Máy khách #2).
- Trong trình duyệt web, cookie sẽ được đặt tự động bởi tiện ích mở rộng Trình trợ giúp Xdebug

- Trong Postman, cookie có thể được đặt trong Tiêu đề yêu cầu

4. Chạy tập lệnh với cookie đã được đặt.
5. Khi thành công, PhpStorm sẽ tự động hiển thị cửa sổ Gỡ lỗi.

6. Đảm bảo bỏ đặt/không gửi cookie để tắt gỡ lỗi và ngừng nghe kết nối gỡ lỗi trong PhpStorm nếu bạn không thực hiện bất kỳ việc gỡ lỗi nào. Nếu bạn không làm như vậy, nó sẽ làm cho proxy DBGp bị treo khi có quá nhiều kết nối bị treo.
Hy vọng hướng dẫn này làm việc cho bạn.
Cảm ơn bạn đã đọc!