2013-08-19 80 views
5

Tôi đã thiết lập XDebug (2.2.1) và PHPStorm-IDE (Mac OS X 10.7.5) với ngăn xếp LAMP tiêu chuẩn cho Mac OS (Apache 2.2.22, PHP 5.3. 15).PHPStorm/debugger không dừng tại các điểm ngắt nhất định

/etc/php.ini

[xdebug] 
zend_extension=/usr/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so 
xdebug.file_link_format="txmt://open?url=file://%f&line=%1" 
xdebug.remote_enable = On 
xdebug.remote_autostart = "PHPSTORM" 
xdebug.var_display_max_data = 1024 
xdebug.dump.GET=* 
xdebug.dump.POST=* 
xdebug.show_local_vars=On 
xdebug.dump.SERVER=* 
xdebug.dump_globals=On 
xdebug.collect_params=4 

Tôi đi theo hai hướng dẫn những điều này và nó hoạt động trong 99% các tập tin dự án của tôi:

Tôi sử dụng Zend Framewor ks kiến ​​trúc MVC. Tôi có thể dừng lại ở điểm ngắt trong hầu hết các lớp điều khiển của tôi, nhưng trong một số bộ điều khiển khác PHPStorm bỏ qua tất cả các điểm ngắt của tôi.

Bạn có bất cứ đề xuất nào không? Làm cách nào để gỡ lỗi trình gỡ lỗi? Loại lỗi cấu hình nào có thể gây ra điều đó?

Cảm ơn sự giúp đỡ của bạn.

Trả lời

0

Điều này thường có nghĩa là bộ điều khiển không được gọi. Nếu nó làm việc cho một số bộ điều khiển (trong cùng một dự án) nó chỉ có nghĩa là: mã sẽ không được gọi.

Vì vậy, hãy thực hiện một vài bước để xem bộ điều khiển chính xác được gọi. (ví dụ: từ công văn và sau đó đi sâu vào cho đến khi bộ điều khiển được tải).

Và có thể bạn làm việc từ xa (ví dụ: từ máy chủ cục bộ đến máy chủ khác). Hơn nữa, có thể mất một chút thời gian trước khi mã được đặt trên máy chủ. Chỉ cần chờ một vài giây và thử lại. Vì làm thế nào nó có thể phá vỡ vào một điểm mà nó không biết?

Hy vọng điều này sẽ giúp bạn bắt đầu gỡ lỗi.

+1

Bộ điều khiển được gọi .. tôi có thể gọi cho anh ấy ở lối vào ... nhưng phpstorm sẽ không dừng lại ở điểm ngắt bên trong bộ điều khiển này. – Simon

+0

Bạn có chắc là bạn đã bật trình gỡ lỗi trong PhpStorm không? Có một số hướng dẫn gần đây có sẵn ở đây: http://confluence.jetbrains.com/display/PhpStorm/Debugging+PHP+Ứng dụng Nó chỉ âm thanh với tôi nó được định cấu hình sai (trong PhpStorm hoặc xDebug). –

6

OK, tôi đã gặp phải sự cố tương tự và tìm hiểu xung quanh lỗi theo dõi lỗi PHPStorm và cũng là diễn đàn của họ.

Nó chỉ ra rằng bạn cần phải đảm bảo rằng đường dẫn đến tệp mà tại đó điểm ngắt không hoạt động chính xác như chúng (thấp hơn/trên trường hợp khôn ngoan) trên MAC của bạn. Tôi vừa di chuyển một dự án từ Windows với các thư mục trường hợp trên/dưới hỗn hợp và tên tệp trên ổ đĩa và các trường hợp khác nhau trong chỉ thị require_once.

Khi tôi đảm bảo đường dẫn trong require_once khớp với trường hợp trên đĩa, thì điểm ngắt của tôi bắt đầu hoạt động trở lại!

Xem tại đây http://devnet.jetbrains.com/message/5488439

+0

Cám ơn bạn đã liên kết :) – Simon

+0

Xin Chúa ban phước cho bạn !! – Talma

+0

Thủ thuật chữ hoa/chữ thường giải quyết nó cho tôi. Cảm ơn! – swenedo

0

Điều này làm tôi khó chịu quá nhiều lần. Thông thường cấu hình của trình gỡ lỗi là lý do. Bạn phải đặt ánh xạ đường dẫn của máy chủ gỡ lỗi chính xác trong "Chạy> Chỉnh sửa cấu hình".

8

Điều này gần như phải là kết quả của các đường dẫn không được phép trong phpstorm. Bạn có thể cấu hình đường dẫn trong Settings-> PHP-> Servers. Tôi chạy vào một vấn đề tương tự và tất cả những gì tôi phải làm là thiết lập đường dẫn tuyệt đối chính xác trên máy chủ (nơi xdebug đang chạy) trong ánh xạ cho thư mục gốc của mã của tôi trong phpstorm. ví dụ. c: \ my \ code \ lives \ ở đây \ trên \ my \ dev \ hộp =>/myserver/my/code/lives/đây/on/my/actual/server.

Đây là một giải pháp hoàn chỉnh hơn, và một số lời khuyên về gỡ lỗi XDebug nói chung:

1) Thêm một tập tin đăng nhập từ xa để thiết lập Xdebug của bạn: xdebug.remote_log = /path/to/logs/xdebug.log

2) apache Restart

3) tail log (tôi giả sử bạn có thể làm điều này trong OSX) tail -f /path/to/logs/xdebug.log

--Bạn có thể thấy điều gì đó rõ ràng sai bằng cách theo dõi nội dung nhật ký lần sau bạn thử gỡ lỗi một trang. Nếu vậy, chỉ cần làm bất cứ điều gì bạn cần làm. Nếu không, chúng ta hãy giả sử nó là một mismapping đường dẫn và tiếp tục cố gắng sửa chữa rằng: -

4) Thiết lập một điểm dừng nơi bạn biết PHPStorm/XDebug sẽ thực sự dừng lại và làm cho nó dừng lại ở đó. Ở nhiều nơi trên web mọi người báo cáo index.php là nơi dễ nhất để làm cho PHPStorm thực sự dừng lại ở điểm ngắt đầu tiên.

5) Trong tệp mà bạn không thể nhận PHPStorm/XDebug để dừng, hãy đặt và bỏ đặt điểm ngắt trong khi PHPStorm được dừng tại điểm ngắt trong tệp index.php. Bạn sẽ thấy các dòng trong tệp nhật ký xdebug của bạn trông giống như sau: < - breakpoint_set -i 19 -t line -f tệp: /// myserver/my/code/lives/đây/on/my/actual/server/file .php -n 159 ->

6) Xem tệp có thực sự hoạt động ở nơi XDebug đang tìm kiếm ví dụ hay không tail /myserver/my/code/lives/here/on/my/actual/server/file.php

7) Nếu tệp không thực sự sống ở đó, hãy điều chỉnh ánh xạ đường dẫn trong cài đặt PHPStorm của bạn cho đến PHPStorm nói cho XDebug xem các tệp thực sự tồn tại. ví dụ. nếu XDebug đã nói file =/mysrver/my/code/lives/đây/on/my/actual/server/file.php, thì ở bước 6 bạn sẽ thấy tập tin không tồn tại trên server, và sau đó bạn có thể nhận ra "oh oops tôi đánh vần myserver sai trong ánh xạ đường dẫn" và sửa lỗi chính tả trong PHPStorm có thể sẽ khắc phục được sự cố.

Đây là một chút của một chủ đề cũ nhưng hy vọng điều này sẽ giúp một ai đó cuối cùng :)

lý do
+0

tôi đã không làm những gì bạn nói nhưng bạn làm cho tôi nhìn lại và thấy nơi để được '/ Applications/MAMP' là'/Application/MAMP'. Cảm ơn –

0

có thể cho không dừng lại ở breakpoint:

  1. IDE từ chối yêu cầu kết nối debug đến từ các máy chủ từ xa . Biểu tượng điện thoại phải có màu xanh lá cây (Chạy -> Bắt đầu nghe các kết nối gỡ lỗi PHP) để tránh điều này.
  2. tất cả các điểm ngắt đều bị tắt tiếng. Tắt ngắt điểm ngắt.
  3. hộp kiểm Tạm dừng của điểm ngắt cụ thể không được chọn. Kiểm tra từng cái một theo số Chạy -> Xem điểm ngắt. Dấu tích có nghĩa là "Tạm ngưng thực hiện", không phải "Tạm dừng điểm ngắt", như người ta có thể nghĩ. (Phiên bản hiện tại của PHPStorm tôi sử dụng có vẻ là lỗi, nếu tôi kiểm tra hộp kiểm Tạm dừng thì nó sẽ không có hiệu lực. Tôi phải bấm vào điểm ngắt khác rồi bấm lại để "gửi" kiểm tra hộp kiểm .)
  4. Nếu bạn muốn gỡ lỗi tập lệnh được gọi từ trình duyệt thì trình duyệt sẽ đặt cookie có tên XDEBUG_SESSION bằng giá trị của idekey. Bạn có thể bắt đầu bằng cách mở rộng URL theo cách này: http://192.168.99.100/?XDEBUG_SESSION_START=PHPStorm. Hãy nhận biết hết hạn của cookie chỉ trong một giờ.Có các tiện ích bổ sung của trình duyệt hữu ích để giảm bớt việc xử lý cookie trình gỡ lỗi. Xem https://xdebug.org/docs/remote#starting để biết thêm.
  5. điểm ngắt riêng lẻ không phải là Đã bật. Kiểm tra từng cái một theo số Chạy -> Xem điểm ngắt.
  6. điểm ngắt cá nhân có một số điều kiện không được đáp ứng. Kiểm tra cài đặt Điều kiện của điểm ngắt trong Chạy -> Xem điểm ngắt.
  7. có một số vấn đề về bản đồ giữa máy chủ từ xa và IDE. Khi bạn thiết lập một điểm ngắt trong IDE thì nó sẽ gửi máy chủ từ xa rằng việc thực thi nên dừng lại ở dòng thứ N của tệp F. Có một ánh xạ giữa các tệp cục bộ của bạn và các tệp trên máy chủ từ xa. Ánh xạ được định nghĩa trong IDE tại các địa điểm sau:

    • trên Đường dẫn lập bản đồ lĩnh vực Preferences -> Ngôn ngữ & Khung -> PHP trang
    • trên Preferences -> Ngôn ngữ & Khung -> PHP -> Máy chủ trang

    Nếu các ánh xạ này không chính xác, ví dụ như địa phương F1.php được ánh xạ tới điều khiển từ xa F2.php do tai nạn, sau đó bạn có thể gặp sự cố. Nếu bạn đặt điểm ngắt tại dòng #N trong tệp cục bộ của bạn F1.php máy chủ sẽ ngừng thực thi chỉ khi thực thi đạt đến dòng #N của tệp F2.php (thay vì là F1. php). Nếu đây là vấn đề thì bạn vẫn có thể gỡ lỗi mã của mình nếu bạn bật Chạy -> Break ở dòng đầu tiên trong mã PHP cờ. Hãy nhận biết về sự nhạy cảm của trường hợp khác nhau trong tên thư mục và tên tệp của hệ điều hành phát triển của bạn so với các máy chủ từ xa!

  8. IDE không nhận được yêu cầu kết nối gỡ lỗi từ máy chủ từ xa do một số vấn đề về cài đặt mạng. Kiểm tra các tùy chọn -> Ngôn ngữ & Frameworks -> PHP -> Debug trang cho dù IDE đang nghe trên cổng 9000 cho XDebug, kiểm tra xem nó Có thể chấp nhận kết nối bên ngoài, v.v.
  9. Cài đặt liên quan đến XDEBUG của máy chủ từ xa không chính xác. Tôi sử dụng các cài đặt sau trong php.ini

.

xdebug.default_enable = 1 
xdebug.remote_enable = 1 
xdebug.remote_connect_back = 0 
xdebug.idekey = "PHPStorm" 
xdebug.remote_autostart = 1 
xdebug.remote_host=192.168.1.26 

Bạn nên đặt remote_host đến địa chỉ IP của máy tính phát triển của bạn, hoặc bạn có thể bỏ qua toàn bộ dòng nếu máy chủ của bạn nằm trên localhost.

Thêm vào đó, tôi đặt các biến môi trường sau đây:

export PHP_IDE_CONFIG="serverName=halmaiXdebug" 
export XDEBUG_CONFIG="idekey=PHPStorm" 

nơi giá trị của serverNameTên của máy chủ tôi xác định trên Preferences -> Ngôn ngữ & Khung -> PHP -> Máy chủ trang trong IDE