2016-10-29 26 views
10

Tôi đang cố gắng gỡ lỗi trang web Drupal bằng plugin PHP trong Intellij (sẽ giống nhau trong PhpStorm).IntelliJ, PhpStorm: Gỡ lỗi với xdebug bỏ qua cookie XDEBUG_SESSION

tôi có các thiết lập sau:

Trình duyệt Chrome trỏ đến một bí danh localhost mydomain.local và phần mở rộng XDebug Helper được cài đặt và thiết lập để Debug. Trong các Công cụ Nhà phát triển trong Cookie, tôi có thể thấy rằng cookie XDEBUG_SESSION được đặt thành PHPSTORM.

Tôi đã cấu hình php với Xdebug cắm sử dụng các cài đặt sau:

xdebug.extended_info = 1 
xdebug.idekey = "PHPSTORM" 
xdebug.max_nesting_level = 500 
xdebug.remote_autostart = 1 
xdebug.remote_connect_back = 0 
xdebug.remote_enable = 1 
xdebug.remote_handler = dbgp 
xdebug.remote_host = 127.0.0.1 
xdebug.remote_mode = req 
xdebug.remote_port = 9000 

Trong IntelliJ tôi đã thiết lập một máy chủ chỉ vào mydomain.local và trong cấu hình chạy Tôi đang sử dụng máy chủ đó và đã thiết lập các Ide chính đến PHPSTORM.

Bây giờ vấn đề là thế này:

Nếu tôi cho phép Nghỉ giải lao tại dòng đầu tiên trong kịch bản PHP, sau đó trình gỡ lỗi ngay lập tức phá vỡ tại địa điểm đầu tiên vỡ bên trong index.php. Nếu tôi vô hiệu hóa tùy chọn đó, tôi nhận được cảnh báo rằng không có điểm ngắt nào bị tấn công, mặc dù tôi có một điểm ngắt và tôi chắc chắn rằng mã đang được thực hiện. Các cảnh báo mà tôi thấy trông như thế này:

Debug session was finished without being paused 
It may be caused by path mappings misconfiguration or not synchronized 
local and remote projects. 
To figure out the problem check path mappings configuration for 
'mydomain.local' server at PHP|Servers or enable Break at first line in 
PHP scripts option (from Run menu). 

Bây giờ nếu tôi dứt khoát sử dụng một URL với tham số truy vấn sau đây nối: ?XDEBUG_SESSION_START=PHPSTORM sau đó tất cả các breakpoint tôi được đúng được breaked trong IntelliJ.

Câu hỏi: Tại sao cookie XDEBUG_SESSION bị bỏ qua?

Cập nhật: Thêm PHP của tôi và phiên bản đầu ra XDebug từ php -v:

PHP 7.0.8-0ubuntu0.16.04.3 (cli) (NTS) 
Copyright (c) 1997-2016 The PHP Group 
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies 
    with Zend OPcache v7.0.8-0ubuntu0.16.04.3, Copyright (c) 1999-2016, 
    by Zend Technologies 
    with Xdebug v2.4.0, Copyright (c) 2002-2016, by Derick Rethans 

và Apache ảo cấu hình máy chủ của tôi:

<VirtualHost *:80> 
    DocumentRoot /var/www/html/mydomain 
    ServerName mydomain.local 
    <Directory /var/www/html/mydomain> 
     Options Indexes FollowSymLinks 
     AllowOverride All 
     Order allow,deny 
     Allow from all 
    </Directory> 

    ErrorLog /var/log/apache2/mydomain.log 
</VirtualHost> 

Cập nhật 2: Tôi có một phần mở rộng php cài đặt được gọi là fpm. Tôi không hoàn toàn chắc chắn lý do tại sao cài đặt của nó hoặc nếu tôi cần nó. Tôi nghĩ rằng nó đã được cài đặt tự động với php. Điều này có thể can thiệp không?

+0

Bạn đã thử đặt 'remote_autostart' thành 0? Có vẻ như không cần thiết để đặt tùy chọn này thành 1 nếu bạn muốn bật gỡ lỗi bằng cách đặt cookie. –

+0

Ngoài ra, phiên bản xdebug của bạn là gì? –

+0

Kiểm tra xem trang web của bạn có thực hiện một số chuyển hướng hay không, đó có thể là nguyên nhân khiến trang web không phá vỡ nơi bạn mong đợi. Mặc dù có vẻ như đó không phải là trường hợp vì nó hoạt động khi bạn thêm tham số GET. – user5542121

Trả lời

0

Khi nó bật ra vấn đề không có trong IntelliJ hoặc PhpStorm, mà đúng hơn là Drupal. Đặc biệt, tôi cần tắt tất cả bộ nhớ đệm.

Bài viết Disable Drupal 8 caching during development giải thích chi tiết các bước để thực hiện điều đó.

Sau khi tôi đã vô hiệu hóa bộ nhớ đệm Drupal, mọi thứ hoạt động như mong đợi.

3

Tôi đã từng gặp sự cố này khi đã thiết lập "overconfigured" của mình.

  1. Bạn có thể muốn thử thêm XDebug helper extension để chrome
  2. Sau khi thêm rằng đi đến các thiết lập của plugin và chọn PhpStorm:

XDebug Helper Settings

  1. Hãy thử chia nhỏ cấu hình xdebug của bạn thành các giá trị sau:

(hoạt động trên hộp của tôi)

zend_extension=xdebug.so 
xdebug.remote_enable=1 
xdebug.remote_port=9000 
  1. Các cấu hình PhpStorm nên chứa debug port 9000 và [X] có thể chấp nhận các kết nối bên ngoài:

PhpStorm Xdebug Settings

  1. Sau đó, bạn nên nghe kết nối gỡ lỗi trong PhpStorm trên:

PhpStorm Debug Listening

  1. Cũng cho phép gỡ lỗi trong trình duyệt của bạn (thông qua các helper Xdebug):

Xdebug helper Debug

  1. Nếu biểu tượng lỗi có màu xanh lá cây xdebug helper debugging on, thì nếu bạn làm mới trang, bạn nên làm tốt, và PhpStorm sẽ dừng lại ở điểm ngắt đầu tiên.
0

Nếu bạn sử dụng fpm và nginx, có lẽ bạn chỉ định cho fastcgi_pass FastCGI-server mà hoạt động trên cổng 9000 theo mặc định. Nếu có, hãy đặt một cổng miễn phí khác cho Xdebug, ví dụ: 9009

1

Tôi đã gặp vấn đề tương tự trong PHPStorm 9 trong khi gỡ lỗi mã bên trong máy ảo. Nhưng trước tiên bạn đặt câu hỏi:

Câu hỏi: Tại sao cookie XDEBUG_SESSION bị bỏ qua?

trả lời: Tôi không biết chính xác nhưng tôi nghi ngờ dựa vào đó nó hoạt động khi bạn chỉ định một cách rõ ràng ?XDEBUG_SESSION_START=PHPSTORM hay "phá vỡ trên dòng đầu tiên", người ta phớt lờ yêu cầu đến. Nó sẽ làm công việc của nó nhưng không dừng lại trên các điểm phá vỡ bởi vì nó nghĩ rằng nó không cần thiết cho yêu cầu hiện tại.

Giải pháp của tôi

gì giúp tôi được thêm điều khiển từ xa tên host/ip với Xdebug, khi gỡ lỗi cho cuộc gọi trình duyệt. Hoặc export những cài đặt đó khi gỡ lỗi từ dòng lệnh.

cho xdebug.ini

xdebug.remote_host=mydomain.local; 
xdebug.remote_connect_back = On 

cho việc sử dụng dòng lệnh:

export PHP_IDE_CONFIG=serverName=mydomain.local; php -dxdebug.remote_autostart=1 -dxdebug.remote_connect_back=1 -dxdebug.remote_host=mydomain.local ./script.php 

Sau đó thiết lập path mapping. Để thực hiện việc này, hãy truy cập Settings ->Languages & Frameworks ->PHP ->Server. Trong đó, chọn máy chủ bạn thiết lập, ví dụ: mydomain.local nếu có và nhập mydomain.local làm tên máy chủ, với cổng 80XDEBUG. Bây giờ hãy kiểm tra "Sử dụng ánh xạ đường dẫn" và cuộn xuống đến index.php của bạn hoặc một số điểm nhập uniqe khác mà bạn có thể truy cập từ trình duyệt. Cái tiếp theo nghe có vẻ ngu ngốc nhưng làm việc cho tôi. Nếu số index.php của bạn nằm dưới /home/lanoxx/project/index.php, hãy nhập cùng một địa chỉ trong "Đường dẫn tuyệt đối trên máy chủ". Sau đó, thiết lập một breakboint trong tập tin index.php và tải trang từ trình duyệt.

Các vấn đề liên quan