Làm cách nào để gỡ lỗi các sự cố định tuyến trong Symfony?

Phần này cung cấp danh sách các giải pháp và cách giải quyết cho các sự cố thường gặp với Gỡ lỗi trong PhpStorm

Thu thập nhật ký gỡ lỗi PhpStorm

Nếu vấn đề của bạn không được giải quyết trong phần này, hãy liên hệ với các kỹ sư hỗ trợ của chúng tôi. Nếu được yêu cầu cung cấp nhật ký triển khai, hãy làm theo hướng dẫn để thu thập chúng

Thu thập nhật ký gỡ lỗi

  1. Chọn Trợ giúp. Công cụ chẩn đoán. Cài đặt nhật ký gỡ lỗi trong menu chính.

  2. Trong hộp thoại Cấu hình nhật ký gỡ lỗi tùy chỉnh mở ra, hãy thêm các dòng sau tùy thuộc vào sự cố bạn đang gặp phải.

    • Các vấn đề với gỡ lỗi PHP. #com.jetbrains.php.debug

  3. Nhấp vào OK và tạo lại sự cố.

  4. Định vị tệp nhật ký bằng cách chọn Trợ giúp. Hiển thị Nhật ký trong Explorer [dành cho Windows và Linux] hoặc Trợ giúp. Hiển thị Trình tìm kiếm nhật ký [dành cho macOS].

    Nếu cần, bạn có thể định vị nhật ký theo cách thủ công

    cú pháp

    %HOMEPATH%\.\system\log

    Ví dụ

    C. \Người dùng\JohnS\. PhpStorm2022. 3\system\log

    cú pháp

    ~/Library/Logs/

    Ví dụ

    ~/Thư viện/Nhật ký/PhpStorm2022. 3

    cú pháp

    ~/./system/log

    Ví dụ

    ~/. PhpStorm2022. 3/hệ thống/nhật ký

    Tệp nhật ký gần đây nhất có tên là idea. nhật ký ; . đăng nhập. 1 idea.log.1 , ý tưởng. đăng nhập. 2 , v.v. Trong hầu hết các trường hợp, bạn chỉ cần cái mới nhất.

  5. Đính kèm [các] tệp nhật ký vào chủ đề hoặc diễn đàn

Thu thập nhật ký Xdebug

Khi sử dụng Xdebug, có thể làm cho nó

  1. Trong hộp thoại Cài đặt [Ctrl+Alt+S], chuyển đến PHP.

  2. Từ danh sách PHP thực thi , chọn trình thông dịch PHP có liên quan và nhấp vào bên cạnh nó. Trong hộp thoại Phiên dịch CLI mở ra, nhấp vào liên kết Mở trong Trình chỉnh sửa bên cạnh Tệp cấu hình. tệp. Đóng tất cả các hộp thoại và chuyển sang tab chứa php. ini tệp được mở.

  3. Trong php. ini , bật ghi nhật ký Xdebug bằng cách thêm dòng sau.

    xdebug. log="path_to_log/xdebug. nhật ký"

    xdebug. remote_log="path_to_log/xdebug. nhật ký"

    Tệp nhật ký chứa giao tiếp thô giữa PhpStorm và Xdebug cũng như bất kỳ cảnh báo hoặc lỗi nào

    Log opened at 2018-01-08 08:14:28 I: Connecting to configured address/port: 127.0.0.1:9000. I: Connected to client. :-] -> < xdebug:message filename="file:///C:/Projects/Samples/DebuggingTutorial/debugging.php" lineno="2">

Tệp nhật ký sẽ không tự động cuộn qua hoặc bị cắt bớt và có thể phát triển thành một tệp có kích thước lớn. Khi đăng nhập không còn cần thiết, nên tắt nó

Đảm bảo rằng Xdebug hoặc Zend Debugger đã được cài đặt và định cấu hình

Để gỡ lỗi mã PHP bằng PhpStorm, hãy đảm bảo rằng bạn có một công cụ gỡ lỗi, Xdebug hoặc Zend Debugger, được cài đặt và định cấu hình đúng cách

Không thể sử dụng đồng thời các công cụ này vì chúng chặn lẫn nhau. Để tránh sự cố này, bạn cần cập nhật các phần tương ứng trong php. ini như được mô tả trong Định cấu hình Xdebug và Định cấu hình Trình gỡ lỗi Zend.

Để xác thực cấu hình công cụ gỡ lỗi, hãy thực hiện các bước được mô tả trong Xác thực cấu hình của công cụ gỡ lỗi

Cảnh báo và lỗi khởi động ngăn trình gỡ lỗi hoạt động

Khi chạy PHP, có thể xảy ra cảnh báo hoặc lỗi khởi động được hiển thị. Trong trường hợp này, trình gỡ lỗi có thể không hoạt động. PhpStorm cũng sẽ không thể nhận ra trình gỡ lỗi đang được sử dụng

Để xác minh rằng không có cảnh báo hoặc lỗi khởi động nào được hiển thị, hãy chạy lệnh sau

php --version

Điều này sẽ trả về một thông báo tương tự như sau

PHP 7. 1. 20 [cli] [được xây dựng. 20 Tháng Bảy 2018 10. 27. 12] [ NTS ] Bản quyền [c] 1997-2018 Nhóm PHP Zend Engine v3. 1. 0, Bản quyền [c] 1998-2018 Công nghệ Zend với Zend OPcache v7. 1. 20, Bản quyền [c] 1999-2018, bởi Zend Technologies với Xdebug v2. 6. 0, Bản quyền [c] 2002-2018, bởi Derick Rethans

Nếu có bất kỳ lỗi hoặc cảnh báo nào xuất hiện trên các dòng đầu tiên, bạn nên sửa chúng trước khi tiếp tục

Trình gỡ lỗi không thể kết nối

Khi trình gỡ lỗi không thể kết nối hoặc từ chối kết nối, hãy kiểm tra các mục sau

  • Đảm bảo Xdebug hoặc Zend Debugger được cấu hình để kết nối với máy chủ và cổng PhpStorm đang chạy trên đó

    • Trong cấu hình Xdebug, đảm bảo rằng xdebug.remote_hostxdebug.remote_port [xdebug.client_hostxdebug.client_port đối với Xdebug 3] là chính xác. Tham khảo để biết chi tiết

    • Khi sử dụng Trình gỡ lỗi Zend, hãy đảm bảo rằng các dấu trang PhpStorm đã tạo hoặc Tiện ích mở rộng gỡ lỗi trình duyệt được định cấu hình để sử dụng đúng địa chỉ IP và cổng

    • Khi sử dụng trình thông dịch PHP từ xa, hãy xác minh các bước được nêu trong Gỡ lỗi từ xa qua đường hầm SSH

  • Trong hộp thoại Cài đặt [Ctrl+Alt+S], điều hướng đến PHP. Gỡ lỗi và đảm bảo PhpStorm và Xdebug / Zend Debugger được định cấu hình với cùng số cổng.

  • Trong PhpStorm, cho phép nghe các kết nối gỡ lỗi đến bằng cách nhấp vào trên thanh công cụ/thanh trạng thái hoặc chọn Chạy. Bắt đầu nghe các kết nối gỡ lỗi PHP trong menu chính. Điều này sẽ đảm bảo PhpStorm phản ứng khi phiên gỡ lỗi bắt đầu và tự động mở cửa sổ công cụ Gỡ lỗi. Trước khi khởi chạy tập lệnh, hãy đảm bảo rằng bạn đã đặt điểm ngắt hoặc tùy chọn Ngắt ở dòng đầu tiên trong tập lệnh PHP được bật trên trang Gỡ lỗi của < . Settings dialog Ctrl+Alt+S.

  • Xác minh không có tường lửa, bộ định tuyến hoặc ISP nào đang chặn kết nối. Điều này có thể được xác minh bằng cách chạy telnet host 9000 [for Xdebug] hoặc telnet host 10137 [đối với Trình gỡ lỗi Zend] từ máy chủ từ xa [trong đó Máy chủ lưu trữ là địa chỉ IP của máy cục bộ của bạn chạy PhpStorm] và kiểm tra xem kết nối đã được thiết lập chưa. Bạn có thể sử dụng http. //www. canyouseeme. org hoặc một dịch vụ tương tự để kiểm tra các cổng vào đã mở

  • Đảm bảo rằng xdebug.remote_host [đối với Xdebug 2], xdebug.client_host [đối với Xdebug 3] hoặc zend_debugger .allow_hosts [đối với Trình gỡ lỗi Zend] được định cấu hình đúng cách. Giá trị có thể là tên máy chủ [ví dụ: localhost ] hoặc địa chỉ IP của máy nơi PhpStorm đang chạy và giá trị này phải có thể ping được từ . Khi sử dụng Xdebug, [đối với Xdebug 2] hoặc [đối với Xdebug 3] có thể được sử dụng để khắc phục sự cố.

Không có máy chủ gỡ lỗi nào được định cấu hình

Nếu bạn bắt đầu phiên gỡ lỗi Không cấu hình mà chưa định cấu hình Máy chủ gỡ lỗi , khi thiết lập kết nối, PhpStorm sẽ hiển thị hộp thoại Kết nối đến trong đó gợi ý . Nếu bạn chọn server access configuration [deployment configuration]. If you choose Nhập ánh xạ từ triển khai , PhpStorm sẽ cố gắng phát hiện cấu hình triển khai phù hợp nhất, chọn trước cấu hình đó trong Triển khai . list, and the Preview area shows the absolute path to the project file, which corresponds to the currently executed script according to the mappings from the selected configuration.

Nếu PhpStorm không phát hiện cấu hình có liên quan

  1. Chọn cấu hình phù hợp nhất từ ​​danh sách hoặc nhấp vào và tạo cấu hình mới trong hộp thoại Triển khai mở ra, sau đó cấu hình mới được thêm vào danh sách.

  2. Trong trường Gốc triển khai , hãy nhập đường dẫn tuyệt đối đến thư mục gốc của máy chủ.

Bạn cũng có thể chọn tùy chọn Chọn dự án hoặc tệp cục bộ theo cách thủ công , trong trường hợp này, PhpStorm hiển thị chế độ xem dạng cây của dự án nơi bạn có thể chọn một . Bạn cũng có thể chọn và ánh xạ toàn bộ dự án.

Không thể đặt ánh xạ đường dẫn cho các tệp hoặc thư mục dự án được đánh dấu là bị loại trừ

Để tiếp tục gỡ lỗi với cài đặt cấu hình đã nhập hoặc được chỉ định thủ công, hãy nhấp vào Chấp nhận .

Đường dẫn tệp từ xa không được ánh xạ tới bất kỳ đường dẫn tệp nào trong dự án

Trong một số trường hợp, trình gỡ lỗi có thể kết nối, nhưng bạn nhận được thông báo lỗi cho biết không có ánh xạ nào giữa tệp từ xa và tệp dự án được xác định. Điều này có nghĩa là PhpStorm không thể xác định tệp cục bộ nào tương ứng với tệp đang được gỡ lỗi

Để giải quyết vấn đề này, hãy nhấp vào Nhấp để thiết lập ánh xạ đường dẫn và cung cấp ánh xạ đường dẫn cần thiết.

Ánh xạ đường dẫn được sử dụng khi đường dẫn đến tệp do máy chủ xử lý khác với đường dẫn đến tệp trong dự án PhpStorm. Điều này xảy ra trong các trường hợp sau

  • Máy chủ ở xa và các tệp dự án là bản sao cục bộ của bản gốc

  • Các tệp được xử lý bởi máy chủ và các tệp được mở trong IDE giống nhau, nhưng các liên kết tượng trưng được sử dụng. Vì trình gỡ lỗi giải quyết các liên kết tượng trưng trong phiên gỡ lỗi, bạn cần báo cho IDE biết các đường dẫn vật lý thực tế của chất tan tới các tệp trên máy chủ

Để định cấu hình ánh xạ đường dẫn, trong hộp thoại Cài đặt [Ctrl+Alt+S], điều hướng đến PHP | Servers .

Nếu các tệp mà máy chủ xử lý nằm trong dự án và bạn không sử dụng liên kết tượng trưng, ​​hãy bỏ chọn hộp kiểm Sử dụng ánh xạ đường dẫn . Trong trường hợp này, IDE sẽ mở tệp theo đường dẫn nhận được từ trình gỡ lỗi.

Ánh xạ đường dẫn được chỉ định cho thư mục mẹ sẽ tự động được áp dụng cho tất cả các thư mục con của nó. Nếu cần, có thể chỉ định ánh xạ đường dẫn cho bất kỳ thư mục con hoặc tệp nào

Xem Định cấu hình đồng bộ hóa với máy chủ để biết thêm chi tiết

Không thể đặt ánh xạ đường dẫn cho các tệp hoặc thư mục dự án được đánh dấu là bị loại trừ

Điểm ngắt không bị tấn công

Khi các điểm dừng không bị tấn công nhưng trình gỡ lỗi dường như kết nối, hãy xác minh những điều sau

  • Xác minh điểm ngắt không bị tắt. Sử dụng Chạy. Lệnh menu View Breakpoints Ctrl+Shift+F8, kiểm tra xem các điểm ngắt đã được bật chưa. Chọn hộp kiểm bên cạnh điểm ngắt để bật nó.

  • Đảm bảo rằng

  • Trên macOS, khi một tệp hoặc thư mục được đổi tên bằng Finder và kiểu chữ cái được thay đổi, PhpStorm có thể không tìm thấy tệp. Nếu cần đổi tên, hãy đảm bảo thực hiện việc đó trong IDE hoặc sử dụng thiết bị đầu cuối và lệnh xdebug.remote_host0. Đổi tên tệp hoặc thư mục dự án bằng Finder có thể dẫn đến hành vi lạ. Xem để biết thêm chi tiết

  • Có một số trường hợp hiếm gặp khi không thể tấn công điểm ngắt do giới hạn kỹ thuật, chẳng hạn như do cách PHP tạo mã byte. Xem để biết thêm chi tiết

Khi sử dụng Xdebug, bạn có thể sử dụng hàm xdebug.remote_host1 để buộc một điểm dừng từ bên trong PHP. Khi Xdebug gặp chức năng này trong khi thực thi, nó sẽ tạm dừng ở câu lệnh tiếp theo trong IDE ngay cả khi ban đầu không có điểm dừng nào được xác định ở đó

Xdebug bỏ qua một điểm ngắt và dừng tại một dòng không xác định điểm ngắt

Điều này có thể xảy ra do cơ chế giải quyết điểm dừng nội bộ của Xdebug. Theo cơ chế này, trình gỡ lỗi đánh giá xem PHP có thể tạo mã byte thực thi nội bộ cho dòng hiện tại hay không. Nếu không có mã như vậy được tạo cho một dòng, điểm dừng tương ứng không thể được nhấn. Xdebug sẽ quét tối đa 5 dòng tiếp theo và dừng ở dòng chứa mã thực thi. Giải quyết các điểm ngắt được hỗ trợ trong Xdebug 2. 8 trở về sau.

Nếu cần, bạn có thể định cấu hình hỗ trợ giải quyết điểm dừng trong PhpStorm trên PHP. Trang gỡ lỗi của hộp thoại Cài đặt [Ctrl+Alt+S].

  • Trong khu vực Xdebug , hãy sử dụng Resolve breakpoint nếu nó không khả dụng trên dòng hiện tại [ . 8+] hộp kiểm để chuyển đổi giải quyết điểm dừng. Lưu ý rằng nếu tính năng phân giải bị tắt, các điểm ngắt được đặt trên các dòng mã không có mã thực thi sẽ luôn bị bỏ qua.

  • Trong khu vực Cài đặt nâng cao , hãy sử dụng Thông báo nếu điểm dừng đã được chuyển sang một dòng khác [ . 8+] hộp kiểm để chọn xem PhpStorm có hiển thị thông báo khi điểm ngắt được giải quyết hay không.

Để có cái nhìn tổng quan kỹ thuật chuyên sâu về cách giải quyết các điểm dừng hoạt động, hãy tham khảo bài viết này và

Một tập lệnh không bị treo

Thiết lập phiên gỡ lỗi Cấu hình không có thể không thành công mà không có điểm ngắt và do đó, tập lệnh không bị treo. Điều này có thể xảy ra nếu hoặc nếu bạn chưa đặt bất kỳ điểm dừng nào. Trong trường hợp sau, bạn có thể thực hiện bất kỳ thao tác nào sau đây.

  • Đặt điểm dừng bằng cách nhấp vào máng xối ở dòng mã thực thi mong muốn. Xem Điểm dừng để biết chi tiết

  • Trong hộp thoại Cài đặt [Ctrl+Alt+S], đi tới PHP. Gỡ lỗi và trong khu vực Kết nối bên ngoài , hãy chọn Ngắt ở dòng đầu tiên . checkbox.

  • Bật Chạy. Ngắt ở dòng đầu tiên trong tùy chọn tập lệnh PHP từ menu chính.

Để PhpStorm hiển thị thông báo nếu tập lệnh không bị treo, hãy chọn hộp kiểm Thông báo nếu phiên gỡ lỗi kết thúc mà không bị tạm dừng trong hộp kiểm . Trang gỡ lỗi Advanced Settings area on the PHP | Debug của hộp thoại Cài đặt .

Trình gỡ lỗi không hoạt động khi sử dụng nginx

Khi sử dụng máy chủ web nginx, việc gỡ lỗi có thể không thành công nếu PHP1_______2 không được cung cấp bởi PHP. Để giải quyết vấn đề này, hãy thêm tham số xdebug.remote_host3 vào cấu hình nginx

fastcgi_param SERVER_NAME $server_name;

hoặc

fastcgi_param SERVER_NAME $host;

Tham khảo tài liệu nginx và xem để biết thêm chi tiết

Xdebug không thể kết nối với PhpStorm

Nếu bạn thấy các thông báo sau trong nhật ký Xdebug

Nhật ký được mở lúc 2017-02-21 17. 52. 27 tôi. Kết nối với địa chỉ/cổng được cấu hình. 172. 19. 0. 1. 9000. W. Tạo ổ cắm cho '172. 19. 0. 1. 9000', thăm dò ý kiến ​​thành công, nhưng lỗi. Hoạt động đang được tiến hành [29]. e. Không thể kết nối với máy khách. . thất vọng. Nhật ký đóng lúc 2017-02-21 17. 52. 27

hoặc

Nhật ký được mở lúc 2017-02-22 13. 17. 13 tôi. Kết nối với địa chỉ/cổng được cấu hình. 10. 10. 10. 10. 9000. e. Hết thời gian kết nối với máy khách. . -[ Nhật ký đóng lúc 2017-02-22 13. 17. 14

Điều này có nghĩa là Xdebug cố gắng kết nối với máy chủ và không thể tạo kết nối. Để khắc phục sự cố, hãy đặt xdebug.remote_host4 [_______1_______5 cho Xdebug 3] và đảm bảo rằng ____1_______ [xdebug.client_host cho Xdebug 3] được đặt chính xác

Cố gắng gỡ lỗi lệnh CLI khung dẫn đến lỗi PHP

Khi cố gắng gỡ lỗi lệnh CLI của công cụ dòng lệnh khung công tác PHP, chẳng hạn như Symfony Console hoặc Laravel Artisan, debugging fails with a PHP error xdebug.remote_host8 or similar.

Nguyên nhân phổ biến của các lỗi như vậy là cố gắng gỡ lỗi tệp hoặc lớp bằng lệnh trực tiếp. Thay vào đó, bạn nên sử dụng Tập lệnh PHP, trong đó bạn cung cấp đường dẫn đến công cụ dòng lệnh và lệnh thực tế để chạy. Trong trường hợp này, logic bootstrapping của lệnh khung sẽ được áp dụng và quá trình gỡ lỗi sẽ diễn ra bình thường

Tham khảo các hướng dẫn dành riêng cho khung sau đây để biết chi tiết

Trình gỡ lỗi Zend sẽ không thực hiện bỏ đặc quyền

Khi sử dụng Zend Debugger trên Linux, thỉnh thoảng bạn có thể gặp lỗi sau

Trình gỡ lỗi Zend. Không thể đọc giá trị hợp lệ của zend_debugger. httpd_uid hoặc zend. httpd_uid, sẽ không thực hiện bỏ đặc quyền

Lỗi này xảy ra khi trình gỡ lỗi không thể xác định UID của người dùng đang chạy quy trình máy chủ web. Tìm UID của người dùng đó và thêm nó vào php. ini .

zend_debugger. httpd_uid=1234

Sau khi cập nhật cài đặt, hãy khởi động lại máy chủ web

Gỡ lỗi với ionCube được cài đặt

Trong một số môi trường PHP, ionCube được sử dụng để tải và chạy mã PHP được mã hóa. Tiện ích mở rộng trình tải ionCube thực hiện điều này bằng cách giải mã mã PHP sẽ được chạy và sau đó đảm bảo rằng trình thông dịch PHP có thể thực thi nó

Chính thức, cả Xdebug và Zend Debugger đều không hỗ trợ chạy khi bật ionCube, tuy nhiên, có một số cách giải quyết để thử. Lưu ý rằng những thứ này không được hỗ trợ bởi JetBrains, ionCube, Xdebug hoặc Zend Debugger

  • Đảm bảo mô-đun trình tải ionCube được tải trước

    Trong php. ini , hãy xác minh rằng trình tải ionCube đã được tải trước khi tải bất kỳ tiện ích mở rộng trình gỡ lỗi nào, chẳng hạn.

    zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/ioncube_loader_lin_5. 4. vì vậy zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug. Vì thế

  • Sử dụng ionCube tải theo yêu cầu

    Chúng tôi có thể tắt tiện ích mở rộng ionCube trong php. ini và tận dụng tính năng tải theo yêu cầu của ionCube. Khi tập lệnh PHP được mã hóa đầu tiên được tải, trình thông dịch PHP sẽ kiểm tra xdebug.remote_host9 được định cấu hình để tìm tiện ích mở rộng ionCube và chạy tập lệnh PHP được mã hóa.

    Lưu ý rằng phương pháp này không được hỗ trợ chính thức. Nó chỉ nên được sử dụng cho mục đích gỡ lỗi và không bao giờ trên máy chủ sản xuất

    Định tuyến Symfony hoạt động như thế nào?

    Khi ứng dụng của bạn nhận được yêu cầu, nó sẽ gọi một hành động của bộ điều khiển để tạo phản hồi. Cấu hình định tuyến xác định hành động nào sẽ chạy cho mỗi URL đến . Nó cũng cung cấp các tính năng hữu ích khác, như tạo các URL thân thiện với SEO [e. g. /read/intro-to-symfony thay vì chỉ mục. php?article_id=57 ].

    Chú thích trong Symfony là gì?

    Symfony sử dụng mô-đun Chú thích Doctrine để phân tích khối tài liệu từ lớp học của bạn . Nhìn thấy. https. //github. com/doctrine/annotations. https. //www. học thuyết-dự án. org/projects/doctrine-annotations/en/current/index. html. Nó sử dụng lớp Reflection để đọc các chú thích.

Chủ Đề