Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. ActionScript

Memperbaiki Bug di AS3: Pendahuluan

by
Read Time:24 minsLanguages:
This post is part of a series called How to Fix Bugs in Flash.
Quick-Tip: Throwing Errors the Clean Way
Quick Tip: How to Debug an AS3 Error #1009

Indonesian (Bahasa Indonesia) translation by Zadip (you can also view the original English article)

Dalam tutorial ini, saya akan menjelaskan beberapa informasi dasar yang Anda butuhkan untuk men-debug aplikasi Flash Anda. Menemukan dan menyelesaikan kesalahan di ActionScript Anda bukanlah tugas kecil, jadi ini sebenarnya hanya artikel pertama dari suatu seri. Dalam angsuran ini, kita akan melihat beberapa hal umum yang dapat Anda lakukan untuk membantu melacak bug Anda.


Berbagai Jenis Kesalahan

Pertama, mari kita bahas apa itu kesalahan. Ada tiga kategori besar kesalahan, tanpa urutan tertentu:

  • Compiler Errors
  • Run-time Errors
  • Logical Errors

Untuk membedakannya, akan sangat membantu untuk memahami proses bagaimana SWF dibuat dan disajikan.

Dalam proses membuat film Flash (atau aplikasi, atau apa pun yang Anda ingin menyebutnya), Anda menulis ActionScript dan membuat aset grafis yang digunakan oleh film. Anda dapat menggunakan Flash Professional, atau Flash Builder dan Flex Framework, atau editor pihak ketiga dan IDE seperti FlashDevelop atau FDT. Dalam semua kasus, pekerjaan yang Anda lakukan untuk membuat film Anda dikenal sebagai authoring dan waktu yang Anda habiskan untuk melakukan itu disebut sebagai author-time.

Pada titik tertentu, Anda ingin melihat hal-hal yang disajikan oleh penulis seperti yang akan mereka lakukan kepada pengguna akhir. Namun, sebelum Anda dapat melihat ini, aset waktu penulis (ActionScript, gambar, gambar, font dan teks, dll) perlu compiled ke dalam SWF yang dilihat pengguna akhir. Ketika Anda menekan "Publish" atau "Test Movie" di Flash, atau "Run" di Flash Builder, Anda sedang mengkompilasi SWF Anda. Program yang Anda gunakan untuk penulis akan mengambil aset waktu penulis Anda dan mengkompilasinya menjadi SWF. Waktu yang diperlukan untuk melakukan ini disebut compile-time, seperti pada, hal-hal yang terjadi pada tahap ini dikatakan terjadi pada waktu kompilasi.

Akhirnya, Anda bisa menjalankan SWF di Flash Player dan melihat bagaimana tampilannya dan berfungsi saat disajikan. Ini terjadi di browser dengan plugin Flash Player, atau tepat di Flash Professional ketika Anda memilih "Test Movie", atau sebagai aplikasi AIR yang berjalan di desktop (atau perangkat seluler). Tidak peduli secara spesifik bagaimana SWF disajikan, itu sekarang running dan kita sekarang mengalami run-time. SWF dijalankan oleh Flash Player, dan semua kode dan grafik yang Anda kompilasi terlihat.

Biasanya, semua ini terjadi untuk Anda; jika Anda menggunakan Flash Professional, memilih "Test Movie" akan mengkompilasi SWF dan kemudian menjalankannya di Flash Player-nya sendiri. Jika Anda menggunakan Flash Builder, memilih "Run" akan mengkompilasi SWF dan kemudian meluncurkannya di browser. Proses tiga tahap ini umumnya adalah sesuatu yang tidak Anda pikirkan, itulah sebabnya saya meluangkan waktu untuk membahasnya secara terperinci.

Sekarang, pada kesalahan, dan bagaimana mereka berhubungan dengan tahapan ini.

Compiler Errors adalah kesalahan dalam kode Anda yang muncul pada compile-time. Ada sesuatu yang secara fundamental salah dengan kode Anda sehingga kompiler berhenti di jalurnya dan berkata, "Whoah, jika kita melanjutkan, SWF Anda akan sangat kacau. Saya tidak bisa melakukannya. Saya tidak bisa. "Ya, oke, itu biasanya tidak terlalu melodramatik, tetapi itu akan memberi jaminan pada tanda pertama dari masalah dan pastikan Anda tidak diberi kepuasan melihat SWF Anda berjalan sebelum Anda memperbaiki masalahnya.

Ini umumnya kesalahan syntax — seperti kawat gigi yang hilang atau salah cocok — atau ketikkan salah cocok; hal-hal yang dapat dilihat dan diketahui oleh mesin adalah salah. Ini adalah kesalahan yang akan Anda lihat di panel Compiler Errors di Flash Professional.

The Compiler Errors PanelThe Compiler Errors PanelThe Compiler Errors Panel
Panel Compiler Errors
The Compiler Errors PanelThe Compiler Errors PanelThe Compiler Errors Panel
Panel Compiler Errors

Run-time Errors adalah kesalahan yang terjadi saat SWF berjalan. Dalam kasus ini, kode secara sintaksis benar, karena dibuat melewati kompiler tanpa kesalahan (kita tahu ini karena SWF sedang berjalan). Tetapi kode tersebut masih memiliki beberapa kekurangan di dalamnya yang menyebabkannya berjalan dengan cara yang tidak disukai oleh Flash Player; Entah itu tidak tahu apa yang harus dilakukan dengan hasil yang tidak terduga ini atau menyebabkan kesalahan untuk memberi tahu Anda bahwa ada sesuatu yang gagal pada saat run-time.

Dalam kasus ini, Anda mendapatkan kesalahan resmi yang merinci masalah dan setidaknya indikasi umum di mana dalam kode Anda itu terjadi. Di Flash Professional, Anda akan melihatnya saat "Test Movie" di panel Output.

A run-time Error in the Output PanelA run-time Error in the Output PanelA run-time Error in the Output Panel
Kesalahan run-time di Panel Output

Logical Errors pada dasarnya adalah kesalahan dalam bagaimana program Anda dikontrol. Ini bukan kompiler kesalahan; SWF dikompilasi dan dijalankan. Ini bukan galat run-time; Flash Player belum menampilkan pesan kesalahan besar di wajah Anda. Semuanya secara teknis benar dan berfungsi, tetapi mereka tidak berfungsi seperti yang Anda inginkan. Mungkin kisi yang Anda buat secara terprogram memiliki satu kolom terlalu banyak, atau total keranjang belanja tidak dihitung dengan benar, atau alamat email yang dimasukkan pengguna sedang divalidasi sebagai tidak dapat diterima ketika benar-benar demikian, atau urutan tampilan gambar di kolom yang salah memesan.

Ini adalah kesalahan paling sulit untuk ditemukan, karena mereka hanya dapat ditemukan dengan menggunakan SWF seperti yang dimaksudkan untuk digunakan, dan membandingkan hasil aktual dengan apa yang Anda harapkan terjadi. Dan begitu ditemukan, Anda tidak mendapatkan pesan kesalahan yang membantu memberi Anda tahu apa yang salah.

Even though we got this far without compiler or run-time error, something is wrong: we're missing a zero on the price.Even though we got this far without compiler or run-time error, something is wrong: we're missing a zero on the price.Even though we got this far without compiler or run-time error, something is wrong: we're missing a zero on the price.
Meskipun kita sampai sejauh ini tanpa kesalahan compiler atau run-time, ada yang salah: kita kehilangan nol pada harga.

Compiler Errors: Menemukan Masalah

Compiler Errors biasanya paling mudah untuk dihadapi. Itu karena, untuk satu, compiler berhenti di jalurnya dan memberi tahu Anda tentang kesalahan, dan untuk dua, compiler error itu sendiri memberi tahu Anda apa yang salah, memberi tahu Anda file dan nomor baris, dan bahkan mencetak baris kode untuk Anda referensi.

Kesalahan kompiler muncul di panel Compiler Errors, jadi mari kita lihat lebih dekat elemen khusus dari IDE Flash ini:

The Compiler Errors Panel, AgainThe Compiler Errors Panel, AgainThe Compiler Errors Panel, Again
Compiler Errors Panel, Lagi

Seperti yang Anda lihat pada diagram beranotasi di atas, setiap kesalahan terdaftar pada barisnya sendiri. Setiap baris terdiri dari informasi dasar yang sama. Di kolom pertama, Anda akan mendapatkan nama file dan nomor baris tempat kesalahan ditemukan. Dalam contoh di atas, kesalahan terjadi pada file kelas. Jika Anda menulis kode langsung di panel Script, maka Anda akan mendapatkan sesuatu seperti "Scene 1, Layer 'Layer 1', Frame 1, Line 1" yang merupakan hal yang sama, hanya untuk kode berbasis file non-teks.

Mengetahui di mana kesalahan terjadi berguna, tetapi kolom kedua berisi informasi tentang mengapa kesalahan terjadi. Bit pertama adalah nomor kesalahan, yang seperti ID. Setiap jenis kesalahan mendapatkan nomornya sendiri. Ini diikuti oleh deskripsi tekstual dari kesalahan. Sekarang, agar adil, Adobe memiliki beberapa deskripsi kesalahan yang agak biasa-biasa saja, dan di artikel mendatang di seri ini, kita akan mencoba menguraikan beberapa yang lebih umum sehingga Anda dapat lebih efektif mengatasinya. Hingga saat itu, setidaknya kita dapat mengetahui bahwa nomor kesalahan dikaitkan dengan deskripsi kesalahan. Teks dalam deskripsi mungkin dikustomisasi untuk menyajikan beberapa relevansi kontekstual, seperti menggunakan variabel atau nama fungsi dari kode sumber Anda, tetapi kesalahan umum terkait dengan nomor tersebut. Misalnya, Kesalahan 1067 adalah kesalahan paksaan, terlepas dari apakah itu paksaan dari String ke DisplayObject atau Array ke ExternalInterface.

Daftar lengkap Complier Errors dapat ditemukan di halaman ini dari dokumentasi Adobe ActionScript:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/compilerErrors.html

Beberapa kesalahan diberikan penjelasan yang lebih menyeluruh pada halaman ini.


Compiler Errors: Mengatasi Masalah

Hebatnya tentang compiler errors adalah bahwa mereka cukup mudah ditemukan. Tidak hanya mereka muncul dan mencegah Anda menjalankan SWF Anda, tetapi Anda dapat dengan mudah menemukan kode bermasalah dari panel Compiler Errors. Cukup klik dua kali setiap kesalahan di panel dan file sumber yang relevan akan terbuka, dengan kursor Anda di baris kanan. Sekarang, jika Anda menggunakan Flash Professional dengan editor eksternal, Anda akan mendapati diri Anda mengklik dua kali dalam mengedit file di Flash Professional. Ini mungkin bertentangan dengan alasan Anda menggunakan editor eksternal, tetapi setidaknya penemuan kesalahan biasanya cukup cepat dan Anda bisa menyelesaikannya dengan sangat mudah. Bahkan jika Anda menggunakan CS5 dengan integrasi Flash Builder yang ketat, mengklik dua kali kesalahan akan memunculkan file di Flash Professional, bukan Flash Builder. Tetapi Flash Builder memiliki panel compiler error sendiri, yang bekerja dengan cara yang hampir sama.

The Flash Builder Compiler Errors panel, or the "Problems" panelThe Flash Builder Compiler Errors panel, or the "Problems" panelThe Flash Builder Compiler Errors panel, or the "Problems" panel
Panel Flash Builder Compiler Errors, atau panel "Problems"

Pada titik ini, itu adalah masalah akan baris kode yang ditentukan oleh kesalahan dan memperbaikinya.


Run-time Errors: Menemukan Masalah

Setelah Anda melewati compiler errors, SWF Anda akan dapat berjalan, tetapi pada titik ini Anda mungkin mengalami run-time error. Ini terjadi karena sejumlah alasan — sekali lagi, kita akan mengeksplorasi nanti di seri ini — tetapi untuk sekarang, mari kita menjelajahi anatomi run-time error. Berikut ini adalah run-time error seperti yang ditampilkan saat SWF berjalan dari "Test Movie" di Flash Professional:

The Output panel displaying a run-time errorThe Output panel displaying a run-time errorThe Output panel displaying a run-time error
Panel Output menampilkan run-time error

Mungkin akan ada banyak teks yang dimuntahkan kepada Anda saat kesalahan muncul. Pada awalnya mungkin tampak sedikit mengintimidasi, tetapi sebenarnya hanya dua bagian utama:

The two main sections of the run-time errorThe two main sections of the run-time errorThe two main sections of the run-time error
Dua bagian utama dari run-time error

Seperti dijelaskan di atas, bit pertama kesalahan adalah deskripsi dari apa yang terjadi. Seperti compile-time errors, setiap jenis kesalahan waktu berjalan memiliki nomor kesalahan, yang dikaitkan dengan deskripsi tekstual pendek. Deskripsi mencakup error type serta kalimat nerd-speak. Jenis kesalahan mungkin berguna untuk mendapatkan pengertian luas tentang apa yang sedang terjadi, tetapi deskripsi adalah apa yang sebenarnya memberi tahu Anda masalahnya. Kita akan melihat contohnya segera.

Bagian utama kedua adalah teks apa pun yang mengikuti bit pertama, yang disebut track stack atau call stack dan kita akan membahas lebih dalam pada langkah berikutnya.

Seperti compile-time errors, deskripsi tekstual meninggalkan sedikit yang diinginkan. Namun, setelah Anda memahami apa arti dari beberapa kesalahan yang paling sering dilihat, Anda akan mengetahui apa yang salah dan akan tahu ke mana harus mencari.

Daftar lengkap run-time errors didokumentasikan di sini, beberapa di antaranya memiliki catatan bersama mereka:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/runtimeErrors.html


Run-time Errors: Memahami Jejak Tumpukan

Mari kita beralih ke bit utama kedua dari run-time error, stack trace. Panjangnya bisa berkisar di mana saja dari satu baris ke sejumlah baris yang terbatas-namun-sangat-besar. Tujuan dari pelacakan tumpukan ini adalah untuk memberi tahu Anda di mana dalam kode Anda kesalahan terjadi.

Setiap baris dalam jejak stack mewakili eksekusi fungsi tunggal. Baris paling atas memberi nama fungsi di mana kesalahan terjadi; itu berisi baris kode yang meledakkan semuanya. Baris kedua dalam stack trace menamai fungsi yang disebut fungsi yang menyebabkan kesalahan. Baris ketiga memberi nama fungsi yang memanggil fungsi yang memanggil fungsi tempat kesalahan terjadi. Dan... Anda mendapatkan idenya. Tapi mari kita ilustrasikan lebih praktis. Dalam kode berikut, fungsi third akan menyebabkan galat run-time dengan mencoba menambahkan "tidak ada" ke daftar tampilan. Namun, kita tidak segera menyebutnya; kita memulai sesuatu dengan memanggil fungsi first, yang memanggil fungsi second, yang pada akhirnya memanggil fungsi third:

Jika Anda menempelkan kode itu di panel Script file Flash baru, dan menjalankannya, Anda melihat kesalahan berikut:

Sekarang, kita tahu bahwa kesalahan itu karena mengirim variabel Sprite yang tidak diinisialisasi ke addChild. Fungsi yang benar-benar melempar kesalahan (itulah istilah teknis; ketika terjadi kesalahan, itu berarti kesalahan dilemparkan oleh baris kode tertentu. Saya suka menganggapnya mirip dengan mengamuk) adalah metode addChild, dan itu ada di bagian atas daftar. Tiga baris berikutnya adalah fungsi yang ditulis, terdaftar paling baru-baru ini. Itu berakhir (atau dimulai, tergantung pada bagaimana Anda melihatnya) dengan panggilan ke frame1 di timeline utama. Ini hanya metode yang memulai SWF. Jika Anda mengatur kelas dokumen, Anda akan melihatnya. Karena contoh ini hanya menggunakan skrip di frame pertama, kita mendapatkan frame1.

Intinya adalah bahwa memanggil frame1 pada akhirnya menyebabkan panggilan yang salah ke addChild, dan Anda dapat mengikuti jalur logika itu dengan membaca jejak stack.

Daftar lengkap panggilan fungsi ini tampaknya hanya berupa kekacauan informasi yang tidak dibutuhkan, tetapi ada beberapa kali ini dapat membantu Anda mempersempit bug Anda. Jika kesalahan hanya terjadi pada fungsi yang diberikan kadang-kadang, Anda mungkin dapat memecahkan masalah dengan menelusuri langkah-langkah yang diambil untuk sampai ke fungsi. Misalnya, jika ada sedikit lebih banyak interaksi dalam fungsi:

Fungsi third mungkin merupakan pelaku yang paling langsung, tetapi pemeriksaan dekat akan mengungkapkan bahwa fungsi second adalah yang benar-benar membuat s nilai null.


Run-time Errors: Flash Debug Player

Alat penting untuk developer Flash adalah versi debug dari Flash Player. Jika Anda belum menginstalnya, Anda harus menghentikan apa yang Anda lakukan (baca artikel ini) dan unduh sekarang. Anda harus memulai kembali peramban Anda, karena ini merupakan pemasangan ulang Flash Player, jadi tandai halaman ini terlebih dahulu!

Buka di sini untuk mengunduh penginstal yang sesuai:

http://www.adobe.com/support/flashplayer/downloads.html

(Pengguna Chrome: baca catatan dukungan ini untuk mengetahui cara menimpa Flash Player bawaan Chrome.)

Setelah Anda me-restart browser Anda, Anda tidak akan segera melihat yang jauh berbeda. Tapi coba di SWF ini di bawah ini. Pertama, Anda akan melihat beberapa teks yang menunjukkan versi Flash Player Anda saat ini, termasuk apakah itu versi debug atau tidak. Tetapi klik pada tombol besar, yang terhubung ke suatu fungsi yang pada akhirnya akan menimbulkan kesalahan. Jika Anda mencoba ini tanpa pemain debug, Anda tidak akan melihat sesuatu terjadi; kesalahan akan terjadi, tetapi akan gagal diam-diam. Namun, jika Anda mencobanya dengan pemutar debug, Anda akan mendapatkan pesan kesalahan yang agak membingungkan dan sulit untuk dilewatkan:

Jika Anda merasa terlalu malas untuk benar-benar menginstal pemutar debug, atau hanya ingin verifikasi bahwa Anda melakukannya dengan benar, kesalahan yang Anda lihat akan terlihat seperti ini:

The error window displayed when the debug player is installed.The error window displayed when the debug player is installed.The error window displayed when the debug player is installed.
Jendela kesalahan ditampilkan ketika pemain debug diinstal.

Jelas, menginstal pemutar debug sangat berguna untuk diberitahu tentang kesalahan saat menguji SWF Anda di browser. Seperti yang mungkin Anda bayangkan (atau sudah diperhatikan), SWF yang bekerja dengan baik dari Flash IDE dapat menemukan sesuatu untuk dikeluhkan ketika ditempatkan di lingkungan yang berbeda, seperti server web Anda. Bayangkan SWF tergantung pada file XML yang akan dimuat, tetapi jika path ke file XML itu salah diselesaikan di server web dibandingkan dengan lingkungan dev lokal Anda, maka kesalahan muat akan terjadi. Tentu akan bermanfaat untuk mengetahui hal ini segera setelah itu terjadi, daripada disajikan dengan SWF yang tidak berfungsi dan tidak ada petunjuk.

Kelemahan dari pemain debug adalah agak atau tidak sama sekali; Anda tidak dapat men-debug situs yang tidak Anda kembangkan. Artinya, jika Anda hanya menjelajahi web, Anda pada akhirnya akan memicu beberapa kesalahan runtime di SWF lain. Itu menjengkelkan, dan memberi Anda gambaran tentang betapa sedikitnya beberapa developers memperhatikan proses pengujian mereka.

Sebagai tip tambahan, Anda dapat dengan mudah mengetahui apakah Anda memiliki versi reguler atau versi debug pemain hanya dengan mengklik kanan pada SWF apa pun dan mencari opsi “Tampilkan Redraw Kawasan” dan “Debugger” di dalamnya:

The Flash Player context menu, when invoked from a debug player
Menu konteks Flash Player, ketika dipanggil dari pemutar debug

Run-time Errors: Mengizinkan Debugging

Apakah Anda melihat kesalahan run-time di IDE atau di browser, kesalahan hanya informatif pada suatu titik. Jika Anda memiliki kesalahan yang terjadi di suatu tempat dalam suatu fungsi, tetapi fungsi itu terjadi sepanjang 20 baris, Anda mungkin mengalami sedikit kesulitan menentukan di mana baris kode yang menyinggung itu berada.

Ada dua teknik yang memiliki hasil yang sama, yaitu bahwa informasi lebih lanjut diberikan dalam bentuk baris kode yang dipertanyakan untuk setiap pemanggilan fungsi.

Teknik pertama lebih langsung: daripada menekan Command-Return/Control-Enter untuk menguji film Anda, tekan Command-Shift-Return/Control-Shift-Enter untuk men-debug film Anda. Ini meluncurkan SWF di Flash Player Debugger, dengan sesi debugging dimulai. Ketika kesalahan run-time dipicu, Anda akan bangkit kembali ke IDE Flash (yang seharusnya mengkonfigurasi ulang dirinya menjadi ruang kerja debug), dan Anda akan melihat sedikit lebih banyak informasi dalam jejak tumpukan (perhatikan secara khusus nomor baris yang ditambahkan ke output di bawah):

Sebagai bonus, jika mungkin Flash akan membuka file yang bertanggung jawab untuk melempar kesalahan, dan arahkan ke baris yang dimaksud. Banyak kesalahan bawaan sebenarnya terjadi di dalam kelas bawaan, jadi tidak mungkin untuk menampilkan kode itu. Tetapi jika Anda ingin melihatnya beraksi, coba kode berikut:

...dan jalankan melalui Debug Movie. Jalur 7 harus dipanggil keluar.

Namun, seperti yang telah kita bahas, kadang-kadang Anda perlu menguji pada server dan melalui browser, dan fasilitas debugging Flash IDE kurang berguna dalam hal itu. Dengan pemain debug yang dipasang di langkah terakhir, ada cara untuk mendapatkan informasi nomor baris yang termasuk dalam jendela kesalahan run-time. Ini semudah mengaktifkan opsi penerbitan.

Di dokumen Flash Anda, pilih File > Publish Settings… dan kemudian klik pada tab Flash. Menuju bagian bawah, di bawah tajuk "Advanced", Anda akan melihat opsi kotak centang untuk Permit  Debugging. Pastikan ini diaktifkan, lalu klik "OK."

The Permit Debugging option in the Flash Publish settingsThe Permit Debugging option in the Flash Publish settingsThe Permit Debugging option in the Flash Publish settings
Opsi Izin Debugging dalam pengaturan Flash Publish

Publikasikan SWF lagi, dan lakukan apa yang perlu Anda lakukan untuk menjalankannya di browser lagi. Ketika kesalahan runtime terjadi sekarang, Anda akan melihat informasi nomor baris yang sama.

Runtime error in the browser, with line numbersRuntime error in the browser, with line numbersRuntime error in the browser, with line numbers
Runtime error di browser, dengan nomor baris

Anda tidak akan dapat melompat ke kode sumber, tetapi trik nomor baris ini dapat menghemat banyak waktu dalam melacak kesalahan.

Namun, berhati-hatilah untuk mengaktifkan Permit Debugging ketika Anda siap untuk menyebarkan SWF ke dunia. Flash perlu menambahkan informasi tambahan ke SWF untuk memberikan nomor baris, dan ukuran file yang dihasilkan dari SWF biasanya 25 - 50% lebih tinggi dari biasanya. Ini alat debugging yang berguna, tetapi bukan sesuatu yang harus Anda nyalakan untuk semuanya di mana saja.


Run-Time Errors: Lempar Sendiri

Saya sebutkan sebelumnya bahwa mungkin untuk melempar kesalahan Anda sendiri (dan kemarahan Anda sendiri, tetapi saya hanya akan menjelaskan bagaimana melakukan kesalahan sebelumnya). Ini bisa menjadi teknik yang membantu dalam debugging. Misalnya, jika Anda memiliki fungsi berikut:

Dan fungsi ini merupakan bagian integral dari fungsionalitas sisa film Anda (mungkin kita tidak dapat melanjutkan dengan bagian yang digerakkan XML jika XML tidak diuraikan), maka Anda mungkin berada dalam pergantian peristiwa yang tidak menyenangkan jika XML objek yang diteruskan ke fungsi objek null, atau mungkin tidak sesuai dengan struktur yang Anda harapkan.

Karena itu Anda mungkin mempertimbangkan, dalam fungsi penting ini, mengatur beberapa cek dan, jika cek gagal, ada beberapa kesalahan. Ini bisa sesederhana ini:

Sebenarnya, Anda mungkin ingin menggunakan ArgumentError alih-alih Error lama, tetapi hasilnya pada dasarnya sama. Jika Anda menjalankan kode ini:

Anda akan melihat kesalahan bermanfaat:

The runtime errorThe runtime errorThe runtime error
Runtime error

Selain itu, Anda mungkin mengantisipasi bahwa XML mungkin tidak null, tetapi mungkin diedit dengan cara yang tidak sesuai dengan harapan fungsi parsing. Jika Anda membutuhkan simpul bernama <entries> untuk diisi dengan simpul tururnan bernama <entry>, tetapi karena kesalahan manusia, file XML tampak seperti ini:

Maka penguraian tidak akan berhasil. Anda dapat melindungi dari ini:

Dan Anda harus mendapatkan kesalahan ini:

Another helpful run-time errorAnother helpful run-time errorAnother helpful run-time error
Run-time error membantu lainnya

Anda mungkin saja menyelamatkan diri sendiri, atau orang lain, beberapa saat nanti ketika file XML diedit dengan tidak benar.


Run-Time Errors: Dapatkan Jejak Stack Tanpa Kesalahan

Terkadang jejak stack berguna dengan sendirinya, bahkan jika tidak ada kesalahan telah terjadi. Misalnya, kadang-kadang saya menemukan diri saya dengan metode yang dipanggil lebih sering daripada yang saya pikir seharusnya. Kalau saja saya bisa melihat metode lain yang memanggilnya, maka saya bisa menemukan dari mana panggilan ekstra itu berasal.

Sepintas, melempar kesalahan akan tampak sebagai solusi yang cocok. Tetapi kesalahan cenderung menghentikan film Flash di jalurnya. Jika kesalahan pertama memberi saya jejak stack, itu mungkin mencegah panggilan kedua tidak pernah terjadi karena kesalahan pertama mencegahnya. Dalam situasi ini, senang mengetahui sedikit lebih banyak tentang objek Error.

Paling berguna adalah metode getStackTrace, yang mengembalikan jejak stack karena akan disajikan adalah Error yang harus dilemparkan. Yang menyenangkan, bagaimanapun, adalah tidak perlu benar-benar dilemparkan untuk mendapatkan informasi ini. Jadi, jika Anda hanya ingin tahu untuk melihat jejak tumpukan tanpa melemparkan kesalahan, Anda dapat melakukan sesuatu seperti ini:

Jika Anda melihat ini di IDE Flash, perbedaan antara ini dan kesalahan yang dilemparkan akan sulit dikenali; mereka berdua hanya akan mengeluarkan banyak informasi ke panel Output. Anda mungkin mempertimbangkan untuk memperindah jejak agar lebih mudah membedakannya. Namun, jika Anda menguji di browser, kode ini tidak akan menampilkan jendela kesalahan, tetapi cukup menulis ke flash log untuk pembacaan Anda (saya mengerti, melacak dari browser dibahas dalam beberapa langkah) .


Lacak Heck Out of Everything

Berbicara tentang jejak, ketika menyangkut debugging, penelusuran adalah tool terbaik yang Anda miliki. Tentu, Flash Professional dan Flash Builder sama-sama memiliki debugger, yang memungkinkan Anda mengatur breakpoints, melangkah melalui kode, dan memeriksa variabel, tetapi cukup jujur, saya menemukan rute tercepat antara bug dan mengumpulkan informasi yang cukup untuk memperbaikinya. Jejak berguna untuk men-debug kesalahan run-time dan logis, tetapi karena kita memiliki tool yang tersedia untuk mendapatkan informasi tentang kesalahan run-time, jejak dapat menjadi garis pertahanan pertama terhadap kesalahan logis.

Jika saya sedang men-debug kesalahan logis, saya biasanya tahu di mana harus fokus. Hal yang tidak berfungsi biasanya dilokalisasi ke satu atau dua kelas, dan biasanya ke beberapa metode dan properti. Jadi, di dalam area masalah potensial, saya melacak semua itu.

Secara lebih praktis, saya cenderung melakukan hal berikut:

  • Letakkan jejak sebagai pernyataan pertama dalam suatu fungsi atau metode, bersama dengan output dari setiap parameter, hanya untuk memastikan fungsi dipanggil dan parameter adalah apa yang saya harapkan.
  • Lacak setiap variabel atau properti yang digunakan dalam fungsi, setidaknya sekali. Jika properti dapat berubah selama fungsi, letakkan jejak sebelum dan sesudah perubahan potensial.
  • Lacak pernyataan bersyarat apa pun, hanya untuk menandai cabang mana yang Anda tuju.
  • Lacak semua iterasi loop, biasanya dengan beberapa informasi tentang iterasi (seperti nomor indeks dan/atau objek dari Array yang relevan dengan iterasi itu)
  • Jika variabel adalah objek yang kompleks, seperti Sprite atau Suara, lacak beberapa properti objek

Sebagai aturan gaya, saya merasa sangat berguna untuk memastikan jejak dilabeli juga. Yaitu, sesuatu seperti ini:

Dengan cara ini, setelah Anda menambahkan selusin jejak ke kode Anda, Anda dapat mengidentifikasi yang mengatakan null di antara semua jejak lainnya dengan lebih mudah.

Selain itu, Anda bahkan mungkin ingin menambahkan nama kelas (dan metode) di jejak Anda, hanya untuk membantu mengidentifikasi lebih jauh sumber dari setiap jejak.

Tidak ada aturan keras dan cepat untuk dilacak, hanya rekomendasi umum saya untuk melacak semuanya, bahkan hal-hal yang Anda pikir tidak perlu, hanya untuk memastikan. Pada titik ini, pertanyaan kembali ke pembaca sudah tepat: teknik penelusuran apa yang Anda andalkan? Jangan ragu untuk memulai perang api di komentar.

[Catatan Editor: Tolong jangan memulai perang api di komentar.]


Melacak: Melacak dari Browser

Keuntungan lain dari pemain debug (tentu saja untuk Flash Developer) adalah kemampuan untuk melihat jejak Anda dari browser, sehingga Anda dapat lebih efektif menguji dan men-debug SWF di habitat aslinya.

Sayangnya, langkah-langkah perlu diambil untuk mengaktifkan penelusuran ini, dan saya tidak akan mengulangi apa yang telah ditulis di tempat lain. Pencarian pada "flash debug trace" akan menghasilkan banyak artikel bagaimana caranya, yang mana artikel favorit saya saat ini ada di bagian atas daftar di Google, sebuah artikel terperinci di yourpalmark.com yang mencakup berbagai versi pemain di Mac, Windows , dan sistem Linux.

Saya akan menambahkan tip untuk pengguna Macintosh. Aplikasi Konsol disebutkan secara sepintas dalam artikel tertaut, tetapi tidak benar-benar dijelaskan atau, menurut pendapat saya, memanfaatkan dengan benar. Console diinstal dengan Mac OS X, dan berada di folder /Applications/Utilities Anda. Ini sangat ideal untuk menampilkan file log, yang sebenarnya dilacak oleh pemain debug Anda. Pintar menggulir ke bawah jika Anda sudah di bawah, tetapi tidak menggulir jika tidak. Mudah untuk memfilter dan mencari log, dan saya merasa sangat diperlukan untuk development Flash.

The Mac's Console application in use for Flash tracesThe Mac's Console application in use for Flash tracesThe Mac's Console application in use for Flash traces
Aplikasi Console Mac yang digunakan untuk jejak Flash

Kuncinya, bagaimanapun, adalah bahwa meskipun Console dapat membuka file teks apa pun, ia hanya mengingat file jika mereka berada di lokasi file log standar pada sistem Anda, dan jika itu file .log. Namun, pemutar debug Flash hanya menulis jejak ke file yang disebut flashlog.txt, yang berada di lokasi file log yang tidak standar. Ada perintah terminal sederhana yang bisa Anda keluarkan untuk membuat tautan simbolik di tempat yang tepat:

Saya menulis lebih banyak tentang trik ini di blog Flash perusahaan saya di sini: http://summitprojectsflashblog.wordpress.com/2008/12/17/leopards-console-and-flash-debug-player-traces/


Flash Debugger

Seperti yang disebutkan sebelumnya, Flash Professional dan Flash Builder keduanya menyediakan lingkungan debugger. Secara pribadi, saya menemukan ini kegunaan terbatas, karena saya lebih suka mengandalkan jejak dan kesalahan run-time. Selain itu, menggunakan debugger secara efektif bergantung pada kemampuan untuk menetapkan breakpoint, yang hanya dapat (dengan mudah) dilakukan dalam kode yang terbuka di Flash Professional atau Flash Builder. Sebagai pilihan pribadi, saya menggunakan TextMate sebagai editor pilihan saya, yang membuat pengaturan breakpoint menjadi rumit. Saya akan lalai, bagaimanapun, jika saya tidak menyebutkan Flash Debugger dalam sebuah artikel tentang debugging Flash.

Ini adalah tur singkat tools debugging yang Anda dapatkan dengan Flash Professional. Mari kita kembali ke contoh kesalahan run-time dari sebelumnya. Rekatkan kode ini ke panel skrip file Flash:

Sebelum memukul Film Debug, klik di sebelah kiri angka "5" di panel Script.

The breakpoints columnThe breakpoints columnThe breakpoints column
Kolom breakpoints

Titik merah akan muncul di kolom, menunjukkan breakpoint telah ditetapkan. Untuk menghapus breakpoint, cukup klik lagi. Dengan breakpoint yang diatur pada baris 5 (di mana yang second disebut inside of first), silakan dan Debug the Movie. Sekarang, kita mengharapkan ruang kerja debug untuk mengambil alih karena kesalahan, tetapi jika Anda melihat apa yang terjadi, kesalahan belum benar-benar terjadi (belum). Ada panah kuning yang menunjuk ke jalur 5, yang menunjukkan bahwa eksekusi program dijeda di breakpoint kita. Pada titik ini, kita memiliki kemampuan untuk melangkah melalui kode satu baris pada satu waktu, dan dalam proses memeriksa nilai variabel, membantu menemukan bug kita.

We've hit the breaking point
Kita telah mencapai titik puncaknya

Pindahkan perhatian Anda ke panel Variables, di sudut kanan bawah.

The Variables panelThe Variables panelThe Variables panel
Panel Variabel

Twiddle membuka entri this, dan Anda akan melihat daftar bersarang semua properti milik "this", yang merupakan garis waktu utama SWF. Gulir ke bawah dan Anda akan melihat "s", variabel Sprite kita. Anda mungkin perlu membuat panel lebih lebar, tetapi kolom kedua harus memiliki nilai di dalamnya, seperti flash.display.Sprite, yang menunjukkan bahwa itu berisi nilai.

The Variables panel, with the s variable exposedThe Variables panel, with the s variable exposedThe Variables panel, with the s variable exposed
Panel Variabel, dengan variabel s terbuka

Perhatikan bahwa panel ini dapat digunakan untuk memeriksa nilai saat ini di properti apa pun pada saat jeda film. Perhatikan juga bahwa saat film dijeda, Anda dapat mengklik dua kali bidang nilai dan mengetikkan nilai baru. Ini hanya akan bekerja pada nilai-nilai primitif seperti Strings dan Numbers, tetapi ini adalah teknik yang mudah untuk diketahui.

Sekarang, gerakkan mata Anda ke panel Debug Console. Di sinilah kita dapat mengontrol jeda dan eksekusi kode kita. Di bagian atas panel ada serangkaian tombol. Cari yang ini:

The Step In buttonThe Step In buttonThe Step In button
Tombol Langkah Masuk

Klik sekali, dan Anda akan melihat bahwa panah kuning naik dari baris 5 ke baris 7. Ini menunjukkan apa yang telah terjadi; kita telah mengeksekusi baris 5 sepenuhnya, yang melibatkan panggilan ke fungsi yang dinyatakan pada baris 7. Langkah selanjutnya dalam program kita adalah memanggil fungsi itu. Periksa s variabel kita di panel Variables. Seharusnya masih memiliki nilai Sprite.

Klik tombol Step In lagi. Panah kuning harus mengarah ke baris 8, di mana kita mengatur s ke null. Namun, jika Anda memeriksa panel Variables lagi, Anda s masih memiliki nilai. Ini karena kita berhenti di jalur 8, tetapi sebelum saluran 8 benar-benar berjalan.

Klik tombol Step In sekali lagi, dan dengan tanda panah kuning yang sekarang melewati baris 8, periksa properti s di panel Variables. Apakah sekarang harus null. Jika contoh ini tidak sesederhana itu, kita mungkin sekarang memiliki wahyu bahwa kode yang baru saja kita jalankan bertanggung jawab untuk null membatalkan properti, yang pada gilirannya menyebabkan kesalahan kita.

Pada titik ini, kita merasa puas diri bahwa ini adalah penyebab kesalahan, sehingga tidak perlu terus melangkah melalui kode. Kita dapat menekan tombol Continue hijau, yang akan melanjutkan eksekusi normal, dan Anda akan melihat kesalahan terjadi.


Penutupan

Seperti yang mereka katakan di tahun 80-an: sekarang Anda tahu, dan mengetahui adalah setengah dari pertempuran. Sekarang Anda harus mengetahui beberapa teknik debugging dan mungkin belajar mengapa beberapa kesalahan muncul di tempat yang berbeda.

Sayangnya, mengetahui fakta-fakta tentang debugging masih setengah jalan. Setengah lainnya jauh lebih sulit untuk ditulis dalam tutorial. Setengah lainnya lebih banyak tentang pengalaman dan intuisi. Setelah Anda memperbaiki ratusan bug, Anda mulai memahami apa sebenarnya kesalahan yang diberikan. Anda juga perlu mengetahui seluk-beluk ActionScript— nuansa yang agak halus — untuk memahami kesalahan yang Anda bersumpah tidak akan terjadi.

Apa yang saya harap telah dilakukan di sini adalah membuat paruh pertama pertempuran lebih mudah untuk dilalui, sehingga ketika Anda menghadapi bug dunia nyata dalam proyek dunia nyata Anda, Anda dapat dengan cepat menyapu jalan Anda melalui babak kedua sedikit lagi. dengan elegan.

Akhirnya, perhatikan serangkaian Quick Tips debugging. Artikel ini memberikan landasan umum yang akan dirujuk oleh Quick Tips di masa mendatang. Individual Quick Tips akan fokus pada jenis bug yang sangat spesifik, dan biasanya umum, yang akan dilontarkan Flash kepada Anda, dan bagaimana cara mengatasinya ketika itu terjadi.

Kita akan melihat Anda di sana, dan terima kasih telah membaca.

[Catatan Editor: Kudos to Yuri Arcurs untuk foto Infuryated Businessman miliknya, tersedia di PhotoDune.]

Advertisement
Did you find this post useful?
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.