Tại sao Xdebug không thử làm lại

Bạn chỉ có thể gỡ lỗi mã PHP của mình bằng cách sử dụng các chức năng gỡ lỗi kết xuất, chẳng hạn như error_log, print

[xdebug]
zend_extension="/path/to/xdebug/extension/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port="9000"
0, và thành thật mà nói, tất cả chúng ta đã làm điều đó rất nhiều. Mặc dù đôi khi hữu ích, nhưng chúng thường không đủ và thực sự có thể làm bạn chậm lại trong khi phát triển. Phải có một cách tốt hơn, chắc chắn?

Nhập Xdebug, công cụ lược tả và gỡ lỗi từng bước khá tuyệt vời dành cho PHP

Trong bài đăng này, tôi sẽ đưa bạn qua hành trình Xdebug của tôi và chỉ cho bạn cách sử dụng nó để giúp cuộc sống của bạn dễ dàng hơn. Bạn có thể cảm ơn tôi sau (trong phần bình luận) 🙂

Nếu bạn là kiểu người thích tìm hiểu mọi thứ một cách trực quan, thì Jonathan, nhà giáo dục nhà phát triển của chúng tôi, đã tạo một video ngắn hướng dẫn chi tiết cách sử dụng Xdebug với PHPStorm

Tại sao Xdebug không thử làm lại

Xdebug đã thay đổi cuộc đời tôi như thế nào

Một vài năm trước, tôi không biết có trình gỡ lỗi tồn tại, chưa bao giờ nghe nói về Xdebug và rất hài lòng khi sử dụng một chức năng mà tôi đã ghép lại với nhau từ Stack Overflow trong tất cả các trang web WordPress của mình để gỡ lỗi

if ( ! function_exists( '_log' ) ) {
    function _log( $message ) {
        if ( WP_DEBUG === true ) {
            if ( is_array( $message ) || is_object( $message ) ) {
                error_log( print_r( $message, true ) );
            } else {
                error_log( $message );
            }
        }
    }
}

Đó là tất cả những gì tôi nghĩ mình cần cho đến khi ai đó giới thiệu tôi với Xdebug và cuộc đời tôi đã thay đổi. Xin lỗi cường điệu, nhưng nó đã xảy ra

Khi bạn kết xuất gỡ lỗi bằng các hàm như error_log hoặc

[xdebug]
zend_extension="/path/to/xdebug/extension/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port="9000"
0, bạn chỉ xuất các biến bạn xác định, đó có thể không phải là những gì bạn cần. Ví dụ: trong khi khắc phục sự cố một số mã, bạn thêm chức năng vào đâu đó để gỡ lỗi một biến. Bạn làm mới trang của mình để dòng gỡ lỗi được thực thi, sau đó kiểm tra nhật ký lỗi của bạn để xem đầu ra. Nếu điều này không cung cấp cho bạn bất kỳ thông tin chi tiết nào về nguyên nhân của sự cố hiện tại, thì bạn cần quay lại và thêm nhiều dòng gỡ lỗi vào mã. Rửa sạch và lặp lại

Xdebug cho phép bạn ngắt trong quá trình thực thi mã và kiểm tra tất cả các biến trong phạm vi trong một yêu cầu. Điều này có nghĩa là bạn có mọi thứ cần thiết để khắc phục sự cố chỉ trong một lần lặp lại chu trình này. Bạn tiết kiệm được rất nhiều thời gian khi theo dõi các vấn đề và quy trình phát triển của bạn hiệu quả hơn

Khắc phục sự cố ++ với Xdebug

Xdebug thực sự tỏa sáng khi cố gắng khắc phục sự cố mà bạn hoàn toàn không biết nguyên nhân. Nếu bạn biết chức năng của mình bị hỏng, các dòng nhật ký bên trong nó rất tuyệt và hoạt động tốt. Nhưng hành vi lạ gây ra sự cố có thể đến từ bất kỳ đâu trong dự án, chẳng hạn như plugin hoặc chính lõi WordPress. Làm thế quái nào để bạn theo dõi nó xuống?

Bằng cách sử dụng các điểm ngắt, bạn có thể tạm dừng thực thi mã tại bất kỳ thời điểm nào, điều đó có nghĩa là điều tốt nhất nên làm là ngắt sớm và theo dõi quá trình thực thi mã với Xdebug (thêm về điều đó sau) cho đến khi bạn phát hiện ra điều gì đó không ổn. Để tiết kiệm thời gian, bạn có thể dần dần di chuyển các điểm dừng xa hơn trong quá trình thực thi cho đến khi bạn tiến gần hơn đến vấn đề tiềm ẩn, thay vì vi phạm mã đã được phân tích là không phải nguyên nhân của vấn đề. Khi tìm thấy sự cố, bạn có thể nhanh chóng thay đổi giá trị của các biến sau khi chúng được chỉ định, vì vậy bạn có thể kiểm tra các bản sửa lỗi tiềm năng trong khi gỡ lỗi, tất cả trong cùng một yêu cầu

Phát triển theo hướng gỡ lỗi

Một công dụng tuyệt vời khác của Xdebug là sử dụng nó một cách chủ động trong quá trình phát triển thay vì phản ứng với các sự cố mã hiện có. Hãy nghĩ về điều này giống như Phát triển dựa trên thử nghiệm (TDD) nhưng trước tiên hãy sử dụng trình gỡ lỗi thay vì viết thử nghiệm. Tôi thậm chí không chắc liệu Debug Driven Development (DDD) có phải là một thuật ngữ được sử dụng rộng rãi hay không, nhưng đối với tôi, tôi đã sử dụng Xdebug để giúp tôi viết mã mới theo một số cách

  1. Kiểm tra các mảng, đối tượng và thể hiện của lớp hiện có để tìm dữ liệu có sẵn cho tôi trong mã, vì vậy tôi có thể sử dụng dữ liệu đó trong mã mới mà tôi viết
  2. Ngay lập tức gỡ lỗi một đoạn mã mới viết để kiểm tra xem nó có hoạt động như mong đợi không

Đây không phải là điều tôi làm mọi lúc, nhưng Xdebug cung cấp cho tôi cái nhìn sâu sắc này khi tôi cần

Cài đặt Xdebug

Hy vọng rằng những lợi ích tôi đã trình bày chi tiết khiến bạn muốn sử dụng Xdebug và bạn đã sẵn sàng cho một số bước cài đặt. Tôi đã tập hợp một danh sách các môi trường cục bộ phổ biến nhất với một số liên kết hữu ích để cài đặt Xdebug trên chúng

  • MAMP
  • MAMP Pro
  • XAMPP
  • VVV
  • trang trại
  • người phục vụ
  • Máy chủ để bàn
  • địa phươngWP
  • DevKinsta
  • docker
  • hộp quỷ

Matt Stauffer gần đây cũng đã biên soạn một danh sách các cấu hình phổ biến có sẵn, vì vậy nếu tôi bỏ lỡ nó, bạn nên tìm thứ gì đó cho môi trường cục bộ của mình ở đó

Bạn có làm việc với một môi trường địa phương khác và cần một số hướng dẫn không?

Phiên bản Xdebug 3

Vào tháng 11 năm 2020, Xdebug 3 được phát hành. Bên cạnh những cải tiến lớn về hiệu suất và hỗ trợ PHP 8, thay đổi quan trọng nhất là cách bạn bật chức năng Xdebug thông qua cài đặt

[xdebug]
zend_extension="/path/to/xdebug/extension/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port="9000"
3 mới. Ngoài việc giúp kích hoạt các loại khác nhau dễ dàng hơn, nó còn thay đổi cách bạn định cấu hình Xdebug trong
[xdebug]
zend_extension="/path/to/xdebug/extension/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port="9000"
4 của mình ngay từ đầu

Hướng dẫn trực tuyến mà bạn đang theo dõi để cài đặt và định cấu hình Xdebug cho môi trường phát triển cục bộ của mình sẽ xác định cài đặt nào bạn cần định cấu hình. May mắn thay, có tài liệu trợ giúp Xdebug về nâng cấp từ phiên bản 2 lên phiên bản 3 để hướng dẫn bạn

Ví dụ nhanh, nếu bạn đã cài đặt phiên bản 2, bạn có thể được hướng dẫn định cấu hình cài đặt

[xdebug]
zend_extension="/path/to/xdebug/extension/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port="9000"
4 của mình để trông giống như thế này

[xdebug]
zend_extension="/path/to/xdebug/extension/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port="9000"

Trong khi nếu bạn đã cài đặt phiên bản 3, bạn sẽ cần cấu hình nó như thế này

[xdebug]
zend_extension="/path/to/xdebug/extension/xdebug.so"
xdebug.mode=debug
xdebug.client_host=127.0.0.1
xdebug.client_port="9003"

Trong phiên bản 3, bạn cũng có thể kích hoạt các chế độ Xdebug khác nhau bằng cách chỉ định chúng trong danh sách được phân tách bằng dấu phẩy

________số 8_______

Đối với bài viết này, tôi đang sử dụng Xdebug 3, với

[xdebug]
zend_extension="/path/to/xdebug/extension/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port="9000"
3 được đặt thành
[xdebug]
zend_extension="/path/to/xdebug/extension/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port="9000"
7, nhưng chúng tôi cũng sẽ đề cập đến bất kỳ sự khác biệt nào đối với phiên bản 2

Tích hợp PhpStorm

tin tức chớp nhoáng. Tôi yêu PhpStorm. Và đoán xem?

Nếu bạn không sử dụng PHPStorm, hầu hết các Môi trường Phát triển Tích hợp (IDE) khác như Visual Studio Code và các trình chỉnh sửa như Sublime Text đều có thể được định cấu hình để sử dụng Xdebug

bắt đầu gỡ lỗi

Khi bạn đã cài đặt Xdebug và cấu hình PhpStorm, bạn có thể bắt đầu gỡ lỗi mã của mình một cách tương tác. Điều này được thực hiện bằng cách đặt các điểm dừng tại một số dòng mã nhất định của bạn và yêu cầu PhpStorm lắng nghe các kết nối đến. Khi PHP thực thi một dòng có điểm dừng trên đó, Xdebug sẽ can thiệp và tạm dừng thực thi, cho phép bạn có được thông tin chi tiết có giá trị về tất cả những gì đang diễn ra trong quá trình thực thi

Tại sao Xdebug không thử làm lại

Thanh bên của bảng gỡ lỗi có nhiều nút khác nhau để kiểm soát việc thực thi mã. Đây là từ trên xuống khi chúng xuất hiện trong ảnh chụp màn hình

  • Tiếp tục chương trình – tiếp tục với việc thực thi PHP
  • Tạm dừng chương trình – không khả dụng trong quá trình gỡ lỗi
  • Dừng - tạm dừng thực hiện
  • View Breakpoints – hiển thị cửa sổ tất cả các điểm ngắt được đặt trong tất cả các tệp của dự án
  • Mute Breakpoints – hủy kích hoạt các điểm ngắt trong khi thực thi (tốt cho việc hoàn thành yêu cầu mà không vi phạm thêm)
  • Cài đặt – điều chỉnh màn hình trình gỡ lỗi
  • Tab Pin – luôn hiển thị bảng Gỡ lỗi

Bên cạnh các tab

[xdebug]
zend_extension="/path/to/xdebug/extension/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port="9000"
8,
[xdebug]
zend_extension="/path/to/xdebug/extension/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port="9000"
9 và
[xdebug]
zend_extension="/path/to/xdebug/extension/xdebug.so"
xdebug.mode=debug
xdebug.client_host=127.0.0.1
xdebug.client_port="9003"
0, thanh trên cùng của bảng điều khiển cách trình gỡ lỗi duyệt qua mã để bạn có thể kiểm tra các phần khác nhau của cơ sở mã

  • Hiển thị điểm thực thi – nhảy trở lại nơi chương trình bị hỏng
  • Step Over – thực thi và chuyển sang dòng tiếp theo của tệp
  • Bước vào – nếu dòng tiếp theo có một hoặc nhiều chức năng, hãy chuyển trình gỡ lỗi vào các chức năng đó để bước qua
  • Force Step Into – bước vào một chức năng được đánh dấu là đã bỏ qua
  • Step Out – di chuyển trình gỡ lỗi ra khỏi chức năng hiện tại trở lại chức năng đã gọi nó
  • Run to Cursor – thực thi đến dòng có con trỏ
  • Đánh giá biểu thức – thực thi PHP trong khi trình gỡ lỗi đang chạy (nghĩ về điều này giống như bảng điều khiển JS của Chrome)
  • Hiển thị các hằng số do người dùng xác định – chuyển đổi hiển thị cho bất kỳ hằng số PHP nào mà mã của bạn đã xác định
  • Hiển thị địa chỉ giá trị – chuyển đổi hiển thị địa chỉ bộ nhớ của các đối tượng
  • Show Empty Superglobals Variables – chuyển chế độ hiển thị của bất kỳ siêu toàn cầu rỗng nào
  • Add Method to Skip List – đánh dấu phương thức sẽ bỏ qua lần sau

Hầu hết các nút này cũng có phím tắt, nhưng thường được sử dụng nhất là

  • F9 – Tiếp tục chương trình
  • F8 – Bước qua
  • F7 – Bước Vào

Điểm ngắt được thêm bằng cách nhấp vào rãnh bên trái của mã, dọc theo dòng bạn muốn tại đó bạn muốn ngắt. PhpStorm cũng cho phép bạn đặt các điểm dừng có điều kiện, nơi bạn thêm logic PHP để kiểm soát khi một điểm ngắt thực sự kích hoạt

Tại sao Xdebug không thử làm lại

Khi khắc phục sự cố, việc kiểm tra và xem giá trị của một biến trong suốt quá trình thực hiện yêu cầu để xem khi nào thay đổi sẽ rất hữu ích. PhpStorm cho phép bạn thêm các biến vào danh sách mà nó theo dõi và hiển thị trong bảng “Đồng hồ” riêng biệt, tách biệt với tất cả dữ liệu trong bảng “Biến” chính. Bạn có thể xem một biến bằng cách nhấp chuột phải vào biến trong tệp trong khi gỡ lỗi và chọn Thêm vào Đồng hồ hoặc thực hiện tương tự từ biến trong bảng "Biến"

Tại sao Xdebug không thử làm lại

Tuy nhiên, đồng hồ không giới hạn ở các biến. Bạn thậm chí có thể thêm các biểu thức hoặc chức năng vào danh sách theo dõi của mình. Điều này cực kỳ hữu ích khi bạn đang làm việc với một CMS như WordPress, sử dụng nhiều chức năng của trình trợ giúp như

[xdebug]
zend_extension="/path/to/xdebug/extension/xdebug.so"
xdebug.mode=debug
xdebug.client_host=127.0.0.1
xdebug.client_port="9003"
1 hoặc
[xdebug]
zend_extension="/path/to/xdebug/extension/xdebug.so"
xdebug.mode=debug
xdebug.client_host=127.0.0.1
xdebug.client_port="9003"
2. Bằng cách thêm lệnh gọi chức năng đầy đủ vào danh sách theo dõi của bạn và bạn sẽ luôn có thể xem kết quả của chức năng đó sẽ như thế nào

dấu vết ngăn xếp

Trong Xdebug phiên bản 2, việc bật Xdebug sẽ cho phép theo dõi ngăn xếp mở rộng đối với bất kỳ lỗi, thông báo hoặc cảnh báo nào được ghi vào nhật ký PHP. Với việc phát hành phiên bản 3, điều này đã được thay đổi để nó cần được kích hoạt rõ ràng bằng cách đặt Xdebug

[xdebug]
zend_extension="/path/to/xdebug/extension/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port="9000"
3 thành
[xdebug]
zend_extension="/path/to/xdebug/extension/xdebug.so"
xdebug.mode=debug
xdebug.client_host=127.0.0.1
xdebug.client_port="9003"
4

Bởi vì tôi dựa vào

[xdebug]
zend_extension="/path/to/xdebug/extension/xdebug.so"
xdebug.mode=debug
xdebug.client_host=127.0.0.1
xdebug.client_port="9003"
5 hoặc PHP error_log để cảnh báo tôi về các vấn đề, nhưng tôi sử dụng PhpStorm để xem dấu vết ngăn xếp, tôi không kích hoạt dấu vết ngăn xếp mở rộng (và rất ồn ào). Khi tôi sử dụng phiên bản 2 của Xdebug, tôi đã vô hiệu hóa dấu vết ngăn xếp trong nhật ký bằng cách đặt cái này vào tệp
[xdebug]
zend_extension="/path/to/xdebug/extension/xdebug.so"
xdebug.mode=debug
xdebug.client_host=127.0.0.1
xdebug.client_port="9003"
7 của mình

if ( function_exists( 'xdebug_disable' ) ) {
    xdebug_disable();
}

Sử dụng nâng cao

Nắm vững những điều cơ bản?

lập hồ sơ

Khi bạn thực sự cần điều tra các vấn đề về hiệu suất với mã hoặc trang web của mình, một trong những công cụ tốt nhất mà chúng tôi tìm thấy là Blackfire, công cụ mà chúng tôi đã viết về. Nhưng Xdebug cũng tạo hồ sơ cho bạn và PhpStorm có thể giải thích kết quả, điều này thật tuyệt vì điều đó có nghĩa là bạn không bao giờ phải rời khỏi PhpStorm. 😂 , hãy chỉnh sửa tệp

[xdebug]
zend_extension="/path/to/xdebug/extension/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port="9000"
4 của bạn để thêm hoặc bỏ ghi chú những dòng này trong phần Xdebug

Phiên bản 3

xdebug.mode = profile
xdebug.output_dir = "/path/to/desired/profiler/output/directory"

Phiên bản 2

xdebug.profiler_enable=1
xdebug.profiler_output_dir="/path/to/desired/profiler/output/directory"

Sau đó, Xdebug sẽ tạo một tệp nhật ký hồ sơ trong

[xdebug]
zend_extension="/path/to/xdebug/extension/xdebug.so"
xdebug.mode=debug
xdebug.client_host=127.0.0.1
xdebug.client_port="9003"
9 hoặc
xdebug.mode=develop,trace
0 mà bạn chỉ định cho mỗi lần thực thi mã của mình. Hãy nhớ tắt trình cấu hình khi bạn hoàn tất, để bạn không lấp đầy ổ cứng của mình bằng các tệp nhật ký. Ngoài ra, hãy đặt thư mục đầu ra thành thư mục
xdebug.mode=develop,trace
1 cho hệ điều hành của bạn. Các nhật ký này sau đó có thể nằm trong PhpStorm bằng cách điều hướng đến Công cụ > Phân tích Ảnh chụp Xdebug Profiler và chọn tệp nhật ký. Hình ảnh không chuyên sâu như Blackfire hoặc sử dụng thứ gì đó như KCachegrind, nhưng đây vẫn là một cách tuyệt vời để phân tích các tắc nghẽn trong mã của bạn

Tại sao Xdebug không thử làm lại

Gỡ lỗi từ xa qua SSH

Bạn chỉ có thể khắc phục lỗi nếu bạn có thể tạo lại chúng trên môi trường phát triển của mình. Tất nhiên, khi nói đến việc chạy một trang web, chúng tôi khuyên bạn nên có môi trường phát triển gần với sản xuất nhất có thể và bạn gỡ lỗi trên một bản sao gần như có thể của cơ sở dữ liệu sản xuất. Tuy nhiên, đôi khi lỗi và điều kỳ lạ sẽ chỉ xảy ra khi sản xuất. Không ai muốn bắt đầu loay hoay trên một trang web trực tiếp, chỉnh sửa tệp để thêm dòng nhật ký. Đừng lo, PhpStorm và Xdebug sẽ hỗ trợ bạn. Bạn có thể cài đặt Xdebug trên máy chủ từ xa và gỡ lỗi thực thi mã cục bộ bằng Xdebug và PhpStorm. Tính năng này là cứu cánh và không yêu cầu nhiều để thiết lập. Đảm bảo tắt Xdebug khi bạn hoàn tất, để hiệu suất trang web của bạn không bị ảnh hưởng bởi Xdebug một cách không cần thiết

Xdebug có phải là cách duy nhất để gỡ lỗi PHP cho WordPress không?

Câu trả lời ngắn gọn là 'không', câu trả lời dài là 'còn tùy'. Mặc dù Xdebug là cách được đề xuất để kích hoạt tính năng gỡ lỗi theo bước cho PHP, nhưng bạn có thể muốn xem xét các tùy chọn khác. Một người mà tôi gặp gần đây là Ray, từ những người ở Spatie. Ray là một ứng dụng trả phí chạy trên Mac, Windows hoặc Linux và kết nối với dự án PHP của bạn. Điều này được thực hiện thông qua gói soạn thảo hoặc plugin WordPress nếu bạn đang gỡ lỗi cho WordPress

Khi bạn đã thiết lập xong mọi thứ, bạn có thể sử dụng lệnh gọi hàm

xdebug.mode=develop,trace
2, rất giống với bảng điều khiển của JavaScript. log(), để gửi bất kỳ dữ liệu tùy ý nào tới ứng dụng Ray. Bạn có thể gửi cho nó các chuỗi, biến đơn giản (bao gồm cả mảng và đối tượng) và thậm chí nhiều kết hợp dữ liệu

ray('Hello world');

ray('My variable', $variable);

ray('array', $array, 'object', $object);

Ray gửi dữ liệu này đến ứng dụng Ray bằng quy trình tương tự như bạn có thể thực hiện khi thực hiện yêu cầu cURL tới API HTTP JSON

Có một số lợi thế khi sử dụng Ray trên Xdebug. Bởi vì Ray sẽ chỉ truyền dữ liệu từ mã của bạn đến ứng dụng Ray khi ứng dụng đang chạy, nó sẽ không ảnh hưởng nhiều đến hiệu suất hệ thống của bạn như Xdebug có thể. Xdebug 3 cải thiện khá nhiều về hiệu suất so với Xdebug 2 và bạn có thể tắt gỡ lỗi thông qua tiện ích mở rộng của trình duyệt khi cần. Tuy nhiên, nó vẫn được cài đặt và hoạt động trên môi trường PHP cục bộ của bạn, vì vậy bạn chỉ có thể thực sự tắt nó hoàn toàn bằng cách vô hiệu hóa nó trong

[xdebug]
zend_extension="/path/to/xdebug/extension/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port="9000"
4 của mình

Ray cũng cho phép bạn thực hiện những việc nâng cao hơn như khả năng tạm dừng thực thi mã, gỡ lỗi từ xa qua SSH và khả năng nắm bắt mọi truy vấn đang được thực thi trong một yêu cầu PHP. Xdebug làm được nhiều hơn một chút và miễn phí, nhưng Ray là thứ cần xem xét như một tùy chọn để gỡ lỗi, đặc biệt nếu bạn vẫn dựa vào gỡ lỗi kết xuất trong quá trình phát triển

Hỗ trợ Xdebug

Người đứng sau Xdebug là Derick Rethans. Anh ấy là nhà phát triển duy nhất của Xdebug và dựa vào các nhà tài trợ để tài trợ cho công việc liên tục của anh ấy là bảo trì và cập nhật Xdebug. Tại Delicious Brains, chúng tôi đã là người ủng hộ Patreon của anh ấy kể từ tháng 2 năm 2019. Nếu bạn hoặc công ty của bạn thấy Xdebug hữu ích, tại sao không tài trợ cho anh ấy thông qua Patreon của anh ấy hoặc qua GitHub?

Phần kết luận

Tôi hy vọng đây là phần giới thiệu tốt về mức độ mạnh mẽ và giá trị của việc sử dụng trình gỡ lỗi như Xdebug đối với quy trình phát triển của bạn, cũng như một giải pháp thay thế khả thi nếu bạn thấy nó quá phức tạp. Xdebug là một trình tiết kiệm thời gian rất lớn và tôi không thể tưởng tượng được việc phát triển mà không có nó trong hộp công cụ của mình. Bạn có sử dụng Xdebug, Ray hoặc trình gỡ lỗi khác không?

Mục nhập này đã được đăng trong WP Offload Media, Mã và được gắn thẻ Hiệu suất, Phát triển, Mẹo phát triển WordPress, Gỡ lỗi, PhpStorm, Xdebug

Thông tin về các Tác giả

Iain Poulson

Iain là giám đốc sản phẩm có trụ sở tại miền nam nước Anh. Anh ấy cũng điều hành nhiều sản phẩm WordPress. Anh ấy giúp mọi người mua và bán doanh nghiệp WordPress và viết bản tin hàng tháng về xu hướng WordPress

@polevaultweb. com

  • Nocare nói.

    Tôi khuyên bạn nên cài đặt xdebug. profiler_output_dir vào thư mục tệp tạm thời của hệ điều hành nếu sử dụng nó. Tôi tìm thấy 18gb đã bị mất dưới dạng nhật ký hồ sơ trong thư mục cài đặt của tôi

    • Iain nói.

      Nắm bắt tốt. Tôi đã cập nhật bài viết 🙂

  • Arik Waisman nói.

    Bạn sẽ làm điều này như thế nào với một phiên bản docker hoặc thực sự là nhiều phiên bản docker. Tôi có hai dự án riêng biệt, mỗi dự án chạy các vùng chứa riêng bằng cách sử dụng cùng một docker được thiết lập. Điều duy nhất tôi thay đổi để chúng chạy là cổng mà chúng cũng liên kết. Một trong những dự án của tôi là trên localhost và localhost khác. 8085. Tôi đã có thể chạy xdebug trên một trong số chúng bằng cách chạy 'sudo ifconfig lo0 alias 10. 254. 254. 254’ để tạo cái mà tôi tin là IP tĩnh, nhưng không thể chạy nó trên dự án khác. Bất kỳ thông tin chi tiết nào cũng sẽ vô cùng hữu ích

    • Iain nói.

      Xin chào Arik, bản thân tôi chưa sử dụng Xdebug trong phiên bản Docker, tôi sợ. Mong bạn giải quyết được 🙂

  • Alex nói.

    Tôi đang cố gắng để Xdebug hoạt động với Xdebug cho Sublime Text 3 nhưng không thể tích hợp hoạt động được. Có ai khác sử dụng Xdebug cho Sublime Text 3 không?

    • Đăng ký Ian nói.

      Xin chào. Tôi đã từng sử dụng Sublime nhưng giờ là Atom. Bạn có thể thiết lập nó với tất cả các chức năng giống như PhpStorm có nhưng trong GUI Atom đẹp hơn. Nói chung, bạn cần cài đặt tiện ích mở rộng của Chrome để kích hoạt hoặc thêm biến truy vấn localhost. 3000/?XDEBUG_SESSION_START

      • Alex nói.

        Đối với cuộc sống của tôi, tôi không thể làm cho Xdebug hoạt động. Đã cài đặt và cài đặt lại qua Homebrew. Mọi thứ sẽ được kiểm tra trong

        xdebug.mode=develop,trace
        
        4 và
        xdebug.mode=develop,trace
        
        5 khi cắm vào https. //xdebug. tổ chức/thuật sĩ. php Mọi thứ đều được kiểm tra ngoại trừ việc tôi không thể để Xdebug hiển thị bất cứ thứ gì trong PhpStorm hoặc Sublime. Không có thông tin trong Khung hoặc Biến trong PhpStorm ngay cả sau khi Xác thực Cấu hình Trình gỡ lỗi trên Máy chủ Web và kết nối trong Chrome với Hỗ trợ IDE của JetBrains Có chuyện gì vậy?

        • Đăng ký Ian nói.

          này Alex. Tôi sẽ kiểm tra lại thiết lập của mình sau hoặc ngày mai. Tôi đang sử dụng Brew để chạy PHP5. 6/7/7. 1 với Xdebugs có liên quan. Bạn có đang sử dụng PHP-FPM không? . https. //github. com/w00fz/xdebug-osx

          • Alex nói.

            Thanks. Tôi thực sự chỉ làm cho nó hoạt động. Đọc qua nhật ký gỡ lỗi, tôi thấy "Tạo ổ cắm cho ‘. 1. 9000', thăm dò ý kiến ​​thành công, nhưng lỗi. Hoạt động đang được tiến hành (19). " dẫn tôi đến đây. http. //techqa. thông tin/lập trình/câu hỏi/41423139/phpstorm+xdebug-hits-a-breakpoint-only-when-using-external-ip-address Và biến xdebug. remote_connect_back thành 0 (giá trị mặc định) đã giải quyết được sự cố. Tài liệu Xdebug. Nếu được bật, xdebug. cài đặt remote_host bị bỏ qua và Xdebug sẽ cố gắng kết nối với máy khách đã thực hiện yêu cầu HTTP. Nó kiểm tra các biến $_SERVER[‘HTTP_X_FORWARDED_FOR’] và $_SERVER[‘REMOTE_ADDR’] để tìm ra địa chỉ IP nào sẽ sử dụng. Phản trực giác nhưng có bạn đi…

          • Iain nói.

            Vui mừng khi biết bạn đã làm cho nó hoạt động, Alex

  • Justin Tucker nói.

    Ian, tôi đánh giá cao chi tiết bạn đưa vào các bài đăng xdebug này. Khi tôi lần đầu tiên học cách thiết lập mọi thứ, tài nguyên còn ít và không kỹ lưỡng. Tôi học được điều gì đó mới mỗi lần. Giữ nó lên

    • Iain nói.

      Cảm ơn vì những lời tốt đẹp, Justin

  • lyles63456 nói.

    Trong thời gian này, có nhiều người dùng háo hức hơn về các công cụ Gỡ lỗi PHP và họ tìm thấy nhiều trợ giúp hơn từ đây. Tôi nghĩ sẽ tốt hơn cho chúng tôi khi chúng tôi tìm thêm thông tin từ đây

  • Văn Thâm nói.

    Tôi có thể sử dụng xdebug mà không phải tải toàn bộ dự án xuống cục bộ không?

    • Iain nói.

      Không có lý do gì bạn không thể gỡ lỗi trên máy chủ Ubuntu từ xa của mình như thế này

  • David Okunmuyide nói.

    "Bạn có làm việc với một môi trường địa phương khác và cần một số hướng dẫn không? Hãy cho chúng tôi biết trong các nhận xét. " Môi trường duy nhất tôi sử dụng là CMS tùy chỉnh của riêng tôi, với công cụ duy nhất tôi sử dụng để phát triển nó là chính CMS đó. Ngoài các công cụ tự động trong khuôn khổ mà tôi đã tạo, tôi chỉ sử dụng Codemirror để xem và sửa đổi PHP. Bạn có thể vui lòng cho tôi một số lời khuyên về cách tôi có thể làm cho Xdebug hoạt động trong môi trường trực tiếp của mình bằng Codemirror không?

  • dzulfriday nói.

    Tôi đoán là không thể chạy mà không có phpstorm…

    • Martin Forsyth nói.

      Có thể với ide php nhật thực miễn phí trên bất kỳ nền tảng nào hỗ trợ nó (nhiều) và trên đó xdebug có sẵn, mặc dù tùy chọn từ xa mà Iain mô tả bổ sung thêm nhiều khả năng. Rất nhiều tài nguyên web về cách thiết lập. Một số bức ảnh về sự sắp xếp 'nhanh và bẩn' ở đây … https. // ảnh. ứng dụng. goo. gl/Mo8VxzF8ZJq3ssPr5

  • Pablo Hernández nói.

    Bây giờ tôi muốn biết cách "gỡ lỗi sản xuất", tôi đang cố gắng thực hiện điều đó trong nhiều tháng

  • Maciej Palmowski nói.

    +1 cho Ray 🙂 Tôi luôn gặp sự cố khi thiết lập Xdebug trên Windows và Ray chỉ hoạt động 🙂

  • Tối đa nói.

    Tôi không thể để Xdebug hoạt động với Vscode. Tôi nhận được rất nhiều hoạt động ngắn gọn hiển thị trong ngăn xếp cuộc gọi của trình gỡ lỗi khi tải ứng dụng php trong trình duyệt, nhưng Vscode chỉ đưa ra lỗi trong bảng điều khiển gỡ lỗi. kết nối 2. đọc ECONNRESET, kết nối 3. đọc ECONNRESET, v.v. Tôi đang sử dụng Valet+ và đã thiết lập đúng cổng, v.v. Bất cứ ai có bất kỳ manh mối?

  • Nick Chomey nói.

    FYI, tùy thuộc vào máy chủ web của bạn, bạn có thể sử dụng các cấu hình php khác nhau cho từng trang web/vhost. Tôi sử dụng OpenLiteSpeed, giúp thực hiện việc này tương đối dễ dàng. Tôi chỉ sao chép tất cả các php. ini vào một thư mục trong thư mục vhost và thay đổi cấu hình vhost để trỏ đến đường dẫn đó. Sau đó, khi tôi kết nối với một vhost/trang web cụ thể qua SSH, tôi có thể dễ dàng bật/tắt chế độ xdebug ngay từ IDE của mình (và sau đó khởi động lại php trên máy chủ). Vì vậy, các trang web trực tiếp có thể tắt xdebug trong khi các trang web dàn dựng/nhà phát triển có thể bật (hoặc tắt để so sánh hiệu suất)

    Điều khiển từ xa XDebug hoạt động như thế nào?

    XDebug hoạt động qua giao thức yêu cầu máy cục bộ của bạn lắng nghe các kết nối đến từ máy chủ nơi đặt ứng dụng mà bạn đang gỡ lỗi . Bạn có thể đã sử dụng các công cụ sửa lỗi chỉ cần kết nối với máy chủ từ xa hoặc quy trình của ứng dụng của bạn.

    PHP XDebug hoạt động như thế nào?

    Khi Xdebug đang chạy, nó sẽ gọi lại IDE của bạn (như PhpStorm hoặc VS Code) từ máy chủ nơi nó đang chạy. IDE của bạn sẽ ngồi và lắng nghe kết nối đó trên một cổng cụ thể (thường là cổng 9000 hoặc 9003)