Teknik Debugging Real-time

18

Tidak ada yang seperti rutin mengubah kode, mengkompilasi kode yang membutuhkan waktu beberapa menit, mengeksekusi kode, menyadari bahwa tweak Anda berada di arah yang salah dan mengulangi proses dari awal lagi.

Saya ingin mulai berinteraksi dengan logika permainan saya saat sesi sedang berlangsung. Apa saja cara Anda menangani hal ini?

Saya akan terbuka untuk mendengar solusi untuk iOS, C / C ++ dan C # / XNA.

David McGraw
sumber

Jawaban:

4

Mengintegrasikan bahasa yang sepenuhnya ditafsirkan dapat memungkinkan Anda untuk menulis ulang elemen-elemen game dengan sangat, sangat mudah.

Python, Lua, dll. Semuanya dapat digunakan secara tersurat untuk ini. Angel Engine mungkin bisa dijadikan contoh.

Pemuatan panas adalah elemen lain yang perlu diperiksa (pada dasarnya, suatu peristiwa dilangsungkan dengan memberi tahu Anda bahwa aset telah berubah - file konfigurasi, elemen seni, dll. - dan Anda menjalankannya melalui serangkaian kondisioner yang memodifikasinya untuk format final sebelum mengganti yang sudah ada dengan yang baru.

Saya telah bekerja dengan mesin prototyping cepat yang menggunakan hot loading dan itu menyenangkan.

Grapsas AA
sumber
2

Sejauh menyangkut C ++, C #, dan C # dengan XNA, Visual Studio memiliki alat debugging yang sangat baik - jeda aplikasi secara real time pada titik mana pun dalam kode, lihat nilai yang ditetapkan ke variabel kapan saja, selesaikan melalui panggilan fungsi , menganalisis tumpukan panggilan, dan banyak lagi. Selain itu, alat-alat seperti Pix dan CLR Profiler membuat pengembangan dengan DirectX (Pix) dan bahasa berbasis CLR (CLR Profiler) hebat.

Selain itu, satu bagian yang sangat berguna dari bekerja dengan permainan adalah kita memiliki area raksasa ini untuk menulis teks debug, grafik, dll. Grafik realtime dari penggunaan memori, jumlah objek / simpul yang ditarik, framerate, dll adalah hal-hal umum yang harus ditarik ke layar.

Sean James
sumber
1
Sementara VS adalah alat pengembangan yang luar biasa, debugging normal membutuhkan waktu - memburu breakpoints, melangkah melalui kode, mengubah variabel, memulai kembali aliran. Pertanyaan ini mencari cara langsung untuk melakukan hal-hal seperti memindahkan komponen antarmuka, atau mengubah rasio serangan atasan, dll.
David McGraw
2

Dalam C / C ++ trik sederhana adalah menempatkan tweakable Anda menjadi variabel statis, memicu breakpoint, mengubah statis di debugger dan tetap bertahan sampai keluar.


sumber
Jadikan itu variabel statis di dalam suatu fungsi. Jika itu adalah Visual studio global statis mungkin tidak dapat menunjukkan nilainya.
Kaj
2

Pencatatan HTTP sangat membantu, dan tidak sulit untuk bangkit dan berjalan. Anda bahkan dapat menggunakan mesin Google App sebagai cara cepat untuk menjalankan ini. Data selalu bermanfaat.

Script & XML ini dapat dimuat ulang dengan cepat dan tidak memerlukan reset. Biarkan mereka gagal tanpa menurunkan permainan. Ini memberi banyak kekuatan untuk seniman, penguji dan desainer.

Menu Debug dalam Gim. Menu debug gim yang sederhana yang dapat Anda tumbuhkan sebagai anak kecil dan membekukan gim dengan slider mesin dan slider gim. Mengizinkan Anda mengubah nomor kunci saat runtime dan mungkin melakukan satu atau dua fungsi debug, atau info dump.

Saya juga suka soket ASYNC seperti yang disebutkan dalam jawaban David

Mudah DIGUNAKAN Tim gim Anda harus dapat menambah alat ini dan menggunakannya dengan sangat mudah, atau alat itu tidak akan digunakan.

Kimau
sumber
2

Saya tahu Sean James sudah mengatakannya . Tapi serius, Visual Studio (khususnya alat debugging) hebat untuk ini.

Saya tidak menggunakan C ++ banyak hari ini, jadi saya tidak yakin seberapa baik ini berlaku di sana. Tetapi untuk C # (termasuk dalam C # Express) Anda memiliki:

  • Edit dan Lanjutkan - tempat Anda dapat membuat perubahan grosir pada logika game Anda.
  • The Watch Window - di mana Anda dapat melihat dan memodifikasi variabel dengan mudah.

Dan ini mungkin membuat Anda berpikir (itu membuat saya bingung ketika saya mengetahuinya):

Jendela Segera sebenarnya agak sulit ditemukan (ada di menu Debug / Windows).

Satu-satunya kelemahan utama menggunakan debugger Visual C # adalah tidak suka mengubah constnilai. Jadi saya biasanya hanya membuat nilai-nilai terkait gameplay saya staticsementara saya men-tweak mereka.

(Juga: memiliki dua monitor sangat membantu.)


Sekarang saya harus mengakui bahwa metode di atas melibatkan menjeda aplikasi Anda - yang bisa lambat untuk beberapa hal fiddly.

Pada kesempatan langka ini, apa yang saya lakukan (dalam XNA) adalah cukup meretas sedikit kode (mungkin menggunakan Edit dan Lanjutkan, seperti di atas) untuk meraih Keyboard.GetState().IsKeyDown()(sebenarnya saya memiliki pembungkus yang lebih mudah diketik untuk ini) dan menyesuaikan nilai dengan penekanan tombol. Apa pun yang lebih rumit tidak sepadan dengan usaha.


Dalam praktiknya, apa yang biasanya saya temukan jauh lebih penting adalah mampu memvisualisasikan (daripada memodifikasi) nilai-nilai secara real-time. Untuk ini saya memiliki kelas kecil yang bagus yang dapat buffer garis dan teks yang akan ditarik pada akhir frame. Ini juga berguna untuk pembuatan prototipe cepat.

(Dan, sekali lagi, senang bisa "Edit dan Lanjutkan" visualisasi ini di saat runtime.)


(sumber: andrewrussell.net )
( dari sini )

Saya khawatir saya tidak memiliki sumber "bagus" untuk dipublikasikan saat ini (mungkin nanti). Tapi itu pada dasarnya hanya daftar baris (untuk pustaka garis bundar ini ) dan string (untuk SpriteBatch bawaan XNA). Buat saja di public staticsuatu tempat, dan gambar semuanya dengan transformasi yang sesuai sehingga semuanya muncul di "ruang dunia" (dan kemudian kosongkan daftar untuk frame berikutnya).

Andrew Russell
sumber
1

Menulis sistem refleksi sederhana untuk C / C ++ cukup sepele. Dengan cara ini Anda dapat menelusuri semua variabel Anda dalam game (baik itu dengan alat jaringan, keyboard atau joypad) dan mengubahnya sesuai dengan isi hati Anda. Ini bekerja untuk saya, tetapi semua jawaban di atas sama-sama valid.

Diedit untuk menambahkan: Thread ini sekarang tentang tweaker, bukan debugging sesuai judul thread.

Kaj
sumber
0

Salah satu solusi yang saya lihat di beberapa studio adalah aplikasi debugging eksternal yang melekat pada program Anda menggunakan jaringan. Aplikasi ini menunjukkan variabel terbuka tertentu, dan memungkinkan Anda untuk mengeditnya secara langsung. Menambahkan variabel baru adalah masalah menambahkan beberapa makro ke kode game.

Pengaturan awal makro sisi permainan, protokol server / klien (solusi yang saya lihat hanya serialise xml bolak-balik), dan penulisan klien, sangat besar. Namun itu sangat berguna, terutama karena menggunakan jaringan untuk komunikasi berarti Anda dapat bekerja pada platform apa pun.

tenpn
sumber
0

Ikat pemuatan dan pembacaan variabel ke dalam file teks dan jalankan dengan menggunakan keybinding atau perintah tertentu dari konsol.


sumber