Menyahpepijat CFML dalam VS Code dengan Lucee Debugger
Belajar debug CFML dalam VS Code dengan penyahpepijat langkah DAP Lucee 7.1. Panduan lengkap titik henti, pemeriksaan pemboleh ubah, cfdump dan teknik log.

Kandungan
- Menyahpepijat CFML dalam VS Code dengan Lucee Debugger
- Penyahpepijat Langkah DAP dalam Lucee 7.1
- Dua Mod: Extension dan Java Agent
- Memasang Sambungan Debugger
- Mengkonfigurasi Persekitaran
- Memasang Sambungan VS Code dan launch.json
- Menetapkan Titik Henti
- Memeriksa Pemboleh Ubah
- breakpoint() dan isDebuggerEnabled()
- Menyahpepijat Tanpa Titik Henti: cfdump dan Log
- Kesilapan Biasa
- Soalan Lazim (FAQ)
- Sumber
Menyahpepijat CFML dalam VS Code dengan Lucee Debugger
Lucee 7.1 memperkenalkan penyahpepijat langkah asli yang menggunakan Debug Adapter Protocol (DAP), membolehkan anda menetapkan titik henti, melangkah melalui kod dan memeriksa pemboleh ubah terus dari VS Code. Sebelum ini, penyahpepijatan CFML banyak bergantung pada cfdump dan log, tetapi kini anda boleh melangkah baris demi baris seperti dalam bahasa lain. Artikel ini membimbing anda daripada pemasangan sambungan hingga teknik menyahpepijat tanpa titik henti dan kesilapan yang perlu dielakkan.
Penyahpepijat Langkah DAP dalam Lucee 7.1
Ciri utama Lucee 7.1 ialah penyahpepijat DAP asli yang disepadukan dengan VS Code melalui Extension Debugger, yang dahulunya dikenali sebagai LuceeDebug. Alat ini asalnya dicipta oleh David Rogers dan kini diselenggara di bawah organisasi Lucee. DAP ialah protokol standard yang membolehkan mana-mana IDE yang menyokong DAP untuk berkomunikasi dengan penyahpepijat, jadi ia tidak terhad kepada VS Code sahaja.
Penyahpepijat ini memberikan titik henti baris dan fungsi, termasuk titik henti bersyarat, pemeriksaan dan pengubahsuaian pemboleh ubah, penilaian hover, dan konsol debug dengan autolengkap untuk menilai kod CFML secara langsung. Satu kelebihan penting ialah sifar overhead pengeluaran: apabila penyahpepijat tidak dilampirkan, ia dimatikan sepenuhnya, tanpa ejen atau pemungutan data latar belakang.
Dua Mod: Extension dan Java Agent
Extension Debugger boleh dijalankan dalam dua mod, dan pilihan bergantung pada versi Lucee anda:
| Aspek | Lucee Extension | Java Agent |
|---|---|---|
| Versi Lucee | 7.1 dan ke atas | 6.2 dan ke atas |
| Persediaan | Pasang sambungan, tetapkan pemboleh ubah persekitaran | Bendera permulaan JVM |
| JDK diperlukan | Tidak, JRE mencukupi | Ya |
| Overhead | Sifar apabila tidak dilampirkan | Instrumentasi bytecode semasa muat kelas |
Jika anda menggunakan Lucee 7.1 atau lebih baharu, gunakan mod Extension. Ia lebih ringkas, lebih pantas dan menyokong lebih banyak ciri. Mod Java Agent hanya diperlukan untuk versi Lucee lama.
Memasang Sambungan Debugger
Untuk Lucee 7.1, pasang sambungan debugger melalui salah satu daripada tiga cara. Cara pertama ialah melalui Lucee Admin, di mana anda mencari "debugger" dalam halaman sambungan. Cara kedua ialah melalui pemboleh ubah persekitaran, dan cara ketiga ialah memuat turun fail .lex dari Maven Central dan meletakkannya dalam folder deploy anda:
LUCEE_EXTENSIONS=org.lucee:debugger-extension
Untuk penggunaan Docker, anda boleh memasukkan pemasangan terus dalam fail compose bersama pemboleh ubah konfigurasi:
services:
lucee:
image: lucee/lucee:7.1
environment:
LUCEE_DAP_SECRET: rahsia-saya
LUCEE_DAP_PORT: 10000
LUCEE_DAP_HOST: 0.0.0.0
LUCEE_EXTENSIONS: org.lucee:debugger-extension
ports:
- "8888:8888"
- "10000:10000"
Mengkonfigurasi Persekitaran
Selepas memasang sambungan, anda perlu menetapkan pemboleh ubah persekitaran dan memulakan semula Lucee. Pemboleh ubah yang paling penting ialah LUCEE_DAP_SECRET, yang wajib dan mesti sepadan dengan konfigurasi klien anda. Pemboleh ubah LUCEE_DAP_PORT menentukan port pelayan DAP, dengan lalai 10000, manakala LUCEE_DAP_HOST menentukan alamat ikatan, dengan lalai localhost tetapi perlu ditetapkan kepada 0.0.0.0 untuk Docker:
LUCEE_DAP_SECRET=rahsia-saya
LUCEE_DAP_PORT=10000
Terdapat juga LUCEE_DAP_BREAKPOINT untuk melumpuhkan instrumentasi titik henti, dan LUCEE_DEBUGGER_DEBUG untuk pengelogan yang lebih terperinci. Setelah dikonfigurasi, anda boleh menyemak sama ada penyahpepijat aktif dari dalam kod menggunakan fungsi isDebuggerEnabled(). Jika anda memulakan pelayan Lucee melalui CommandBox, pemboleh ubah persekitaran ini boleh dibekalkan bersama arahan start, seperti yang diterangkan dalam panduan pengenalan CommandBox.
Memasang Sambungan VS Code dan launch.json
Di sisi VS Code, pasang sambungan luceedebug dari Marketplace. Kemudian tambah konfigurasi debug dalam fail .vscode/launch.json:
{
"type": "cfml",
"request": "attach",
"name": "Lucee Debugger",
"hostName": "localhost",
"port": 10000,
"secret": "rahsia-saya"
}
Nilai port dan secret mesti sepadan dengan LUCEE_DAP_PORT dan LUCEE_DAP_SECRET pada pelayan. Tekan F5 atau klik Start Debugging untuk melampirkan penyahpepijat. Apabila IDE melihat fail pada laluan yang berbeza daripada Lucee, contohnya dalam Docker atau pelayan jauh, gunakan pathTransforms untuk memetakan laluan antara kedua-duanya.
Menetapkan Titik Henti
Titik henti baris ditetapkan dengan mengklik pada tepi kiri editor, seperti dalam bahasa lain. Lucee 7.1 turut menyokong titik henti fungsi, titik henti bersyarat, dan titik henti pengecualian yang berhenti pada pengecualian tidak tertangkap dengan skop cfcatch penuh. Setelah kod berhenti, anda boleh melangkah masuk, keluar atau melangkaui baris semasa.
Jika titik henti tidak mengikat, gunakan palet arahan VS Code dan jalankan "luceedebug: show class and breakpoint info" untuk memeriksa apa yang berlaku. Ini alat diagnostik utama apabila penyahpepijat nampaknya tidak berhenti di tempat yang dijangkakan.
Memeriksa Pemboleh Ubah
Apabila pelaksanaan berhenti pada titik henti, anda boleh memeriksa nilai pemboleh ubah dalam panel pemboleh ubah, menukar nilainya, menambah ungkapan tontonan, dan menilai kod CFML dalam konsol debug. Penilaian hover membolehkan anda melihat nilai sesuatu ungkapan dengan hanya menghalakan tetikus ke atasnya. Ciri autolengkap dalam konsol debug memudahkan penulisan ungkapan CFML yang kompleks.
Keupayaan ini mengubah cara anda menangani pepijat CFML. Daripada meneka nilai sesuatu pemboleh ubah dan menulis cfdump berulang kali, anda boleh melihat keadaan sebenar pada titik tertentu dalam pelaksanaan. Apabila memeriksa pemboleh ubah, memahami skop mana yang aktif pada masa itu menjimatkan banyak masa, jadi rujuk panduan memahami skop CFML jika anda keliru antara skop variables, request dan session.
breakpoint() dan isDebuggerEnabled()
Lucee 7.1 menambah fungsi breakpoint() yang berfungsi seperti kenyataan debugger dalam JavaScript. Ia menggantung pelaksanaan apabila penyahpepijat dilampirkan, membolehkan pemeriksaan pemboleh ubah, dan memulangkan benar jika titik henti dikenakan:
// Titik henti mudah
breakpoint();
// Titik henti berlabel, ditunjukkan dalam UI penyahpepijat
breakpoint( label="sebelum query" );
// Titik henti bersyarat
for ( i = 1; i <= 1000; i++ ) {
breakpoint( condition=( i == 42 ) );
}
Fungsi isDebuggerEnabled() pula memulangkan benar jika sokongan penyahpepijat DAP didayakan, berguna untuk menambah logik debug secara bersyarat. Kedua-dua fungsi ini selamat ditinggalkan dalam kod pengeluaran kerana tanpa sambungan debugger dipasang, ia hanya memulangkan palsu tanpa sebarang overhead. Titik henti programatik ini amat berguna di dalam komponen CFC yang rumit; asas penulisan komponen dibincangkan dalam panduan fungsi dan komponen CFC.
Menyahpepijat Tanpa Titik Henti: cfdump dan Log
Walaupun penyahpepijat langkah sangat berkuasa, teknik lama masih berguna, terutamanya pada pelayan pengeluaran di mana titik henti tidak praktikal. Fungsi writeDump memaparkan kandungan kebanyakan jenis objek CFML dan sangat berguna untuk menyahpepijat nilai pemboleh ubah:
writeDump( var=getTimeZoneInfo(), label="Info zon masa" );
Atribut output menentukan destinasi, sama ada browser atau console, dan atribut format memilih output text, html atau classic. Untuk pengelogan berterusan, gunakan tag cflog yang menulis mesej ke fail log dengan aras seperti info, debug, error dan trace:
<cflog text="Pemprosesan bermula" log="aplikasi" type="information">
Mesej log ini boleh disemak kemudian dalam fail log tanpa mengganggu aliran permintaan. Gabungan cfdump untuk pemeriksaan segera dan cflog untuk pengesanan berterusan meliputi kebanyakan keperluan penyahpepijatan harian.
Kesilapan Biasa
Kesilapan pertama ialah menulis keadaan titik henti bersyarat dengan operator penugasan dan bukannya perbandingan. Menulis x = 42 bermaksud menetapkan nilai, manakala x == 42 bermaksud membandingkan, dan ini boleh menyebabkan titik henti berkelakuan aneh. Keadaan yang gagal dinilai akan dianggap palsu oleh penyahpepijat.
Kesilapan kedua ialah lupa menetapkan LUCEE_DAP_HOST kepada 0.0.0.0 apabila menjalankan Lucee dalam Docker. Tanpa ini, penyahpepijat hanya mendengar pada localhost di dalam bekas dan tidak boleh dicapai dari hos. Kesilapan ketiga ialah ketidakpadanan antara secret dalam launch.json dan LUCEE_DAP_SECRET pada pelayan, yang menghalang sambungan. Perubahan versi dan ciri Lucee 7.1 dibincangkan dalam panduan Lucee 7 dan masa depan.
Soalan Lazim (FAQ)
Apakah penyahpepijat langkah DAP dalam Lucee?
Ia ialah penyahpepijat asli yang diperkenalkan dalam Lucee 7.1, menggunakan Debug Adapter Protocol untuk membolehkan VS Code menetapkan titik henti, melangkah melalui kod dan memeriksa pemboleh ubah dalam CFML.
Bagaimana cara memasang Lucee Debugger?
Untuk Lucee 7.1, pasang sambungan debugger melalui Lucee Admin, pemboleh ubah persekitaran LUCEE_EXTENSIONS=org.lucee:debugger-extension, atau fail .lex manual. Kemudian pasang sambungan luceedebug dalam VS Code.
Apakah pemboleh ubah persekitaran yang diperlukan?
LUCEE_DAP_SECRET adalah wajib untuk pengesahan, manakala LUCEE_DAP_PORT menentukan port pelayan DAP dengan lalai 10000, dan LUCEE_DAP_HOST menentukan alamat ikatan.
Bagaimana cara menetapkan titik henti dalam CFML?
Klik pada tepi kiri editor VS Code untuk titik henti baris, atau gunakan fungsi breakpoint() dalam kod untuk titik henti programatik, dengan pilihan label dan condition.
Bolehkah saya menyahpepijat tanpa titik henti?
Ya, guna fungsi writeDump untuk memaparkan nilai pemboleh ubah dan tag cflog untuk menulis mesej ke fail log. Kedua-duanya berguna pada pelayan pengeluaran di mana penyahpepijat langkah tidak praktikal.