Gerçek Zamanlı Hata Ayıklama Teknikleri


18

Bir değişkeni düzeltmek, birkaç dakika süren bir kod derlemek, kodu yürütmek, çimdiklerinizin yanlış yönde olduğunu fark etmek ve işlemi tekrar tekrar tekrarlamak gibi bir şey yoktur.

Bir oturum devam ederken oyun mantığımla etkileşime başlamak istiyorum. Bunu yaparken kullandığınız yollardan bazıları nelerdir?

İOS, C / C ++ ve C # / XNA için çözümler duymaya açık olurum.

Yanıtlar:



4

Tamamen yorumlanmış bir dili entegre etmek, oyun öğelerini anında çok kolay bir şekilde yeniden yazmanıza izin verebilir.

Python, Lua, vs. bunun için açıkça kullanılabilir. Angel Engine muhtemelen örnek olabilir.

Sıcak yükleme, kontrol edilmesi gereken başka bir öğedir (temel olarak, bir varlığın değiştiğini bildiren bir olay tetiklenir - bir yapılandırma dosyası, bir sanat öğesi vb.) Ve bunu, varolan yeni ile değiştirmeden önce son biçimi.

Sıcak yüklemeyi kullanan hızlı bir prototipleme motoruyla çalıştım ve bu bir zevkti.


2

C ++, C # ve XNA ile C # ile ilgili olarak, Visual Studio mükemmel hata ayıklama araçlarına sahiptir - uygulamayı kodun herhangi bir noktasında gerçek zamanlı olarak duraklatın, herhangi bir zamanda değişkenlere atanan değerleri görün, işlev çağrıları arasında adım atın , çağrı yığınını analiz edin ve daha fazlasını yapın. Ayrıca, Pix ve CLR Profiler gibi araçlar DirectX (Pix) ve CLR tabanlı diller (CLR Profiler) ile geliştirmeyi harika hale getirir.

Buna ek olarak, oyunlarla çalışmanın özellikle yararlı bir parçası, hata ayıklama metni, grafikler vb. Yazmak için bu dev alana sahip olmamızdır. Bellek kullanımının gerçek zamanlı grafikleri, çizilen nesne / köşe sayısı, kare hızı, vb. Ekrana çizmek için ortak şeylerdir.


1
VS olağanüstü bir geliştirme aracı olmakla birlikte, normal hata ayıklama zaman alır - kesme noktalarını avlamak, kodda adım atmak, değişkenleri değiştirmek, akışı yeniden başlatmak. Bu soru, bir arayüz bileşenini taşımak veya bir patronun saldırı oranını değiştirmek gibi şeyleri yapmak için acil bir yol arıyor
David McGraw

2

C / C ++ 'da basit bir numara, tweakable'ınızı statik bir değişkene koymak, bir kesme noktasını tetiklemek, hata ayıklayıcıdaki statik değeri değiştirmek ve çıkışa kadar kalıcı kalmaktır.


Yine de bir işlev içinde statik bir değişken olun. Küresel bir statik ise, Visual studio değerini gösteremeyebilir.
Kaj

2

HTTP Günlüğü büyük bir yardımcıdır ve çalışmaya başlaması zor değildir. Google App motorunu, bunu çalıştırmanın hızlı bir yolu olarak bile kullanabilirsiniz. Veriler her zaman yararlıdır.

Komut dosyaları ve XML bunlar anında yeniden yüklenebilir ve sıfırlama gerektirmez. Oyunu düşürmeden başarısız olmalarına izin verin. Bu sanatçılara, test kullanıcılarına ve tasarımcılara çok fazla güç veriyor.

Oyun İçi Hata Ayıklama Menüsü Çocukken ortaya çıkabileceğiniz ve hem motor kaydırıcıları hem de oyun kaydırıcıları ile oyunu dondurabileceğiniz basit bir oyun hata ayıklama menüsü. Anahtar sayılarını çalışma zamanında değiştirmenize ve belki bir veya iki hata ayıklama işlevi veya bilgi dökümünü gerçekleştirmenize izin verir.

David'in cevabında belirtildiği gibi ASYNC soketlerini de seviyorum

KULLANIMI Kolay Oyun ekibiniz bu araçlara ekleyebilmeli ve bunları çok kolay kullanabilmeli, yoksa kullanılmayacaktır.


2

Sean James'i zaten biliyorum söylediđini biliyorum . Ama cidden, Visual Studio (özellikle hata ayıklama araçları) bunun için müthiş.

Bugünlerde C ++ kullanmıyorum, bu yüzden orada ne kadar iyi uygulandığından emin değilim. Ancak C # için (C # Express dahil):

Ve bu aklını uçurabilir (bunu öğrendiğimde benimkini patladı):

Anlık Pencereyi bulmak gerçekten zordur (Hata Ayıklama / Windows menüsünde).

Visual C # hata ayıklayıcısını kullanmanın tek büyük dezavantajı, constdeğer değiştirmeyi sevmemesidir. Bu yüzden genellikle oyunla ilgili değerlerimi staticdeğiştirirken yaparım.

(Ayrıca: İki monitöre sahip olmak çok yardımcı olur.)


Şimdi, yukarıdaki yöntemin başvurunuzu duraklatmayı içerdiğini itiraf etmeliyim - bu özellikle birkaç şey için tatmin edici derecede yavaş olabilir.

Bu nadir durumlarda, yaptığım (XNA'da) basitçe kod biraz (muhtemelen yukarıdaki gibi Düzenle ve Devam Et'i kullanarak) kesmek Keyboard.GetState().IsKeyDown()(aslında bunun için daha kolay yazılan bir sargıcım var) ve tuş vuruşlarına göre değer. Daha karmaşık bir şey çabaya değmez.


Uygulamada genellikle ne bulmak çok daha önemli mümkün ediliyor görselleştirmek (ziyade bir değiştirme yerine) gerçek zamanlı olarak değerleri. Bunun için, çerçevenin sonunda çizilecek satırları ve metni arabelleğe alabilen güzel bir sınıfım var. Hızlı prototipleme için de kullanışlıdır.

(Ve bir kez daha, bu görselleştirmeleri çalışma zamanında "Düzenle ve Devam Et" edebilmek güzel.)


(kaynak: andrewrussell.net )
( buradan )

Korkarım şu anda yayınlamak için "güzel" kaynağım yok (belki daha sonra). Ancak temelde bu satırlar ( bu yuvarlak çizgi kitaplığı için ) ve dizelerin (XNA'nın yerleşik SpriteBatch için) bir listesidir . Sadece bir public staticyere yapın ve her şeyi "dünya uzayında" görünecek şekilde uygun bir dönüşümle çizin (ve bir sonraki kare için listeleri temizleyin).


1

C / C ++ için basit bir yansıma sistemi yazmak oldukça önemsizdir. Bu şekilde oyundaki tüm değişkenlerinize göz atabilir (bir ağ aracı, klavye veya joypad ile olsun) ve kalbinizin içeriğine değiştirebilirsiniz. Benim için çalışıyor, ancak yukarıdaki tüm cevaplar eşit derecede geçerli.

Eklemek için düzenlendi: Bu iş parçacığı artık iş parçacığı başlığına göre hata ayıklama değil, tweaking ile ilgili.


0

Birden fazla stüdyoda gördüğüm bir çözüm, ağı kullanarak programınıza bağlanan harici bir hata ayıklama uygulamasıdır. Bu uygulama belirli maruz değişkenleri gösterir ve gerçek zamanlı olarak onları düzenlemek için izin verir. Yeni değişkenler eklemek, oyun koduna bazı makrolar eklemekle ilgilidir.

Oyun tarafı makroların ilk kurulumu, sunucu / istemci protokolü (sadece xml'yi seri olarak gördüğüm çözümler) ve istemciyi yazmak büyük. Ancak, özellikle ağı iletişim için kullanmak, herhangi bir platformda çalışabileceğiniz anlamına gelir.


0

Değişkenin yüklenmesini ve okunmasını bir metin dosyasına bağlayın ve konsoldan belirli bir tuş bağlama veya komut kullanarak tetikleyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.