Docker dan XDebug tidak membaca breakpoint VSCode

Saya telah menggunakan XDebug dengan PHP Versi 7.0.* selama 6 bulan terakhir di MAC menggunakan debugging jarak jauh ke wadah Docker.

Saya menjalankan buruh pelabuhan versi lama yang menggunakan VirtualBox ke VM untuk buruh pelabuhan, semuanya berfungsi dengan baik.

Saya baru-baru ini memperbarui buruh pelabuhan ke versi 17.03.1 dan hanya mengalami masalah dengan xDebug. Saya telah menghubungi pembuat vscode-php-debug melalui masalah di repositorinya dan dia kemudian mengarahkan saya untuk mengatasi masalah tersebut dengan xdebug dan atau buruh pelabuhan.

Masalah saya adalah sebagai berikut:

XDebug sedang berjalan dan bekerja pada wadah saya, log xdebug menunjukkan bahwa ia terhubung ke IDE saya tetapi hanya menutup koneksi seolah-olah tidak ada titik henti sementara ketika titik henti sementara saya disetel di VSCode.

Masalah yang saya posting di vscode-php-debug dapat ditemukan di sini

Yang memiliki salinan log xDebug dan log debug VSCode saya... Ini menunjukkan bahwa koneksi telah dibuat tetapi tidak ada breakpoint yang tercapai.

Saya telah membaca beberapa blog bahwa buruh pelabuhan sekarang memerlukan ip loopback yang dibuat agar koneksi ke xdebug berfungsi, yang juga telah saya coba dan gagal.

Saya merasa sangat sulit untuk melakukan debug tanpa debugger setelah menggunakannya begitu lama.

Saya telah mencoba banyak konfigurasi, menginstal ulang, mem-boot ulang, membangun kembali gambar/wadah dan bahkan telah mencoba saluran irc buruh pelabuhan dan xdebug di freenode tanpa hasil.


person Joshua Lawson    schedule 12.04.2017    source sumber
comment
Adakah kemungkinan Anda menggunakan Mac? Karena ada beberapa masalah dengan buruh pelabuhan untuk mac (versi komunitas) dan xdebug. Saya membuatnya berfungsi dengan menjalankan perintah setiap reboot.   -  person Bram    schedule 12.04.2017
comment
Ya, saya menggunakan Mac   -  person Joshua Lawson    schedule 12.04.2017


Jawaban (2)


EDIT-2 2018

Nilai remote_host sekarang dapat diubah untuk mendukung semua platform:

xdebug.remote_host = "host.docker.internal"

EDIT-1 2018 Tidak perlu lagi menggunakan perbaikan plist. Seperti yang ditunjukkan dalam Intisari ini: https://Gist.github.com/chadrien/c90927ec2d160ffea9c4#gistcomment-2398281 Anda sekarang dapat menggunakan buruh pelabuhan untuk IP internal mac.

[xdebug]
xdebug.remote_host = "docker.for.mac.host.internal"
xdebug.default_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_connect_back = 0
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_port = 9000
xdebug.idekey="PHPSTORM"

KONFIGURASI LAMA

Karena Anda menggunakan buruh pelabuhan di Mac, saya memposting cara kerja solusi saya. Sebagian besar kredit diberikan ke postingan ini di forum buruh pelabuhan.

Dengan asumsi instalasi xdebug Anda benar, ini adalah konfigurasi saya di php.ini.

[xdebug]
xdebug.remote_host=10.254.254.254
xdebug.remote_autostart=1
xdebug.idekey = PHPSTORM
xdebug.default_enable = 0
xdebug.remote_enable = 1
xdebug.remote_connect_back = 0
xdebug.profiler_enable = 1

Anda dapat menguji konfigurasi Anda dengan menjalankan perintah ini di terminal Anda. sudo ifconfig en0 alias 10.254.254.254 255.255.255.0.

Jika ini berhasil, Anda dapat mengubahnya menjadi file plist dan meletakkannya di lokasi berikut. /Library/LaunchDaemons/com.docker.xdebugFix.plist. Di bawah ini Anda akan menemukan versi file plist saya.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.docker.xdebugFix</string>
    <key>ProgramArguments</key>
    <array>
        <string>ifconfig</string>
        <string>en0</string>
        <string>alias</string>
        <string>10.254.254.254</string>
        <string>255.255.255.0</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Catatan: Plist hanya akan berfungsi setelah Mac Anda di-boot ulang.


Konfigurasi PHPSTORM (juga diperlukan setelah pengeditan tahun 2018)

Setelah itu saya mengatur PHP storm saya dengan server debug seperti ini: php storm config 1

php badai konfigurasi 2

Setelah itu breakpoint saya berfungsi, jika Anda menggunakan chrome Anda juga harus menggunakan ekstensi xdebug tetapi saya cukup yakin Anda mengetahui ini karena Anda pernah menggunakannya sebelumnya.

person Bram    schedule 12.04.2017
comment
Ini adalah proses yang sudah saya coba... tanpa hasil... tetapi saya mungkin akan mencobanya sekali lagi hari ini - person Joshua Lawson; 13.04.2017
comment
Sayangnya ini masih tidak berhasil... Saya juga telah mencoba dengan xdebug chrome... XDebug melaporkan koneksi sebagai terhubung tetapi tidak ada titik henti sementara dan bahkan tidak putus saat awal jika saya mengaturnya di IDE atau ekstensi chrome xdebug saya.. .. - person Joshua Lawson; 13.04.2017
comment
Saya menemukan masalah dan itu karena pengaturan docker-compose.yml saya... dengan versi lama buruh pelabuhan yang berjalan di VirtualBox saya harus membuka port container saya 9000 ke atas sehingga xDebug dapat menggunakan terowongan untuk terhubung ke saya host... yang dengan buruh pelabuhan sekarang menyebabkan konflik... Jadi jawaban di atas benar tetapi catatan tambahan bagi siapa pun yang DID memiliki port 9000 terbuka di wadahnya... tidak perlu lagi dibuka/diteruskan - person Joshua Lawson; 13.04.2017
comment
@joshualawson Keren! Jangan ragu untuk mengedit jawabannya dan menambahkan info docker-compose.yml. Senang Anda menemukan jawabannya! - person Bram; 13.04.2017
comment
xdebug.idekey=VSCODE juga berfungsi dengan baik untuk saya - person Met Br; 25.07.2021

Periksa docker-compose.yml Anda

Saya memiliki variabel lingkungan di milik saya:

XDEBUG_CONFIG: remote_host=${LAN_IP}

yang perlu diubah menjadi:

XDEBUG_CONFIG: client_host=${LAN_IP}

di mana LAN_IP didefinisikan sebagai IP LAN lokal di file .env Anda

person Dieter Gribnitz    schedule 10.01.2021