เทคนิคการดีบักตามเวลาจริง


18

ไม่มีอะไรที่เหมือนกับกิจวัตรประจำวันของการปรับแต่งตัวแปร, การคอมไพล์โค้ดที่ใช้เวลาสองสามนาที, รันโค้ด, โดยตระหนักว่า tweak ของคุณอยู่ในทิศทางที่ไม่ถูกต้อง

ฉันต้องการเริ่มต้นโต้ตอบกับตรรกะเกมของฉันขณะที่เซสชันกำลังดำเนินการอยู่ มีวิธีใดบ้างที่คุณจัดการเรื่องนี้?

ฉันจะเปิดให้ฟังโซลูชันสำหรับ iOS, C / C ++ และ C # / XNA

คำตอบ:


12

เพิ่งค้นพบสิ่งนี้สำหรับนักพัฒนา iOS -

AsyncSocket
คุณตั้งค่าเซิร์ฟเวอร์ในแอปพลิเคชันของคุณและเชื่อมต่อผ่านเทอร์มินัล จากนั้นคุณสามารถปั๊มคำสั่งระยะไกลและเริ่มจัดการกับตัวแปรแบบเรียลไทม์ เนียนสวย


4

การรวมภาษาที่ถูกตีความอย่างสมบูรณ์จะช่วยให้คุณสามารถเขียนองค์ประกอบของเกมได้อย่างง่ายดายและรวดเร็ว

สามารถใช้ Python, Lua และอื่น ๆ ได้อย่างชัดเจนในเรื่องนี้ Angel Engineอาจเป็นตัวอย่างได้

การโหลดที่น่าสนใจเป็นอีกองค์ประกอบหนึ่งในการตรวจสอบ (โดยทั่วไปเหตุการณ์ถูกไล่ออกโดยบอกว่าสินทรัพย์มีการเปลี่ยนแปลง - ไฟล์กำหนดค่าองค์ประกอบศิลปะ ฯลฯ - และคุณเรียกใช้ผ่านชุดข้อมูลที่ปรับเปลี่ยนสำหรับ รูปแบบสุดท้ายก่อนที่จะแทนที่ที่มีอยู่ด้วยใหม่

ฉันได้ทำงานกับเครื่องมือสร้างต้นแบบที่รวดเร็วซึ่งใช้การโหลดร้อนและเป็นความยินดี


2

เท่าที่เกี่ยวข้องกับ C ++, C #, และ C # ด้วย XNA แล้ว Visual Studio มีเครื่องมือการดีบักที่ยอดเยี่ยม - หยุดแอปพลิเคชันตามเวลาจริง ณ จุดใดก็ได้ในรหัสดูค่าที่กำหนดให้กับตัวแปรได้ตลอดเวลาผ่านการเรียกฟังก์ชัน วิเคราะห์สแตกการโทรและอื่น ๆ นอกจากนี้เครื่องมืออย่าง Pix และ CLR Profiler ทำให้การพัฒนาด้วย DirectX (Pix) และ CLR อิงภาษา (CLR Profiler) ยอดเยี่ยม

นอกจากนี้ส่วนหนึ่งที่มีประโยชน์โดยเฉพาะอย่างยิ่งในการทำงานกับเกมคือเรามีพื้นที่ขนาดใหญ่ในการเขียนข้อความดีบักกราฟิกและอื่น ๆ กราฟแบบเรียลไทม์ของการใช้หน่วยความจำจำนวนวัตถุ / จุดยอด, อัตราเฟรม ฯลฯ เป็นสิ่งทั่วไปในการวาดลงบนหน้าจอ


1
ในขณะที่ VS เป็นเครื่องมือในการพัฒนาที่โดดเด่นการดีบั๊กปกติต้องใช้เวลาค้นหาจุดพักหยุดก้าวผ่านโค้ดเปลี่ยนตัวแปรเปลี่ยนการรีสตาร์ทโฟลว์ คำถามนี้กำลังมองหาวิธีที่รวดเร็วในการทำสิ่งต่าง ๆ เช่นย้ายองค์ประกอบของส่วนต่อประสานหรือปรับแต่งอัตราส่วนการโจมตีของเจ้านาย
David McGraw

2

ใน C / C ++ เคล็ดลับง่าย ๆ คือการทำให้ tweakable ของคุณเป็นตัวแปรแบบสแตติกเรียกจุดพักเปลี่ยนแบบคงที่ในดีบักเกอร์และมันจะคงอยู่จนกระทั่งออก


ทำให้มันเป็นตัวแปรคงที่ภายในฟังก์ชั่น หากเป็นสตูดิโอ Visual คงที่ทั่วโลกอาจไม่สามารถแสดงค่าของมัน
Kaj

2

การบันทึก HTTPเป็นความช่วยเหลืออย่างมากและไม่ยากที่จะเริ่มต้นใช้งาน คุณสามารถใช้โปรแกรม Google App เป็นวิธีที่รวดเร็วในการเริ่มต้นใช้งาน ข้อมูลมีประโยชน์เสมอ

สคริปต์และ XMLสามารถโหลดใหม่ได้ทันทีและไม่จำเป็นต้องรีเซ็ต ปล่อยให้พวกเขาล้มเหลวโดยไม่ทำให้เกมแย่ลง สิ่งนี้ให้พลังแก่ศิลปินผู้ทดสอบและนักออกแบบ

เมนูแก้จุดบกพร่องในเกมเมนูแก้จุดบกพร่องในเกมที่ง่ายซึ่งคุณสามารถวางไข่ตั้งแต่เด็กและหยุดเกมที่มีทั้งตัวเลื่อนเครื่องยนต์และตัวเลื่อนเกม อนุญาตให้คุณปรับแต่งหมายเลขคีย์ขณะใช้งานจริงและอาจใช้ฟังก์ชันดีบั๊กหนึ่งหรือสองฟังก์ชั่นหรือดัมพ์ข้อมูล

ฉันรักซ็อกเก็ต ASYNC ตามที่ระบุไว้ในคำตอบของเดวิด

ใช้งานง่ายทีมเกมของคุณจะต้องสามารถเพิ่มลงในเครื่องมือเหล่านี้และใช้งานได้ง่ายมากไม่เช่นนั้นจะไม่ได้ใช้งาน


2

ฉันรู้ว่าฌอนเจมส์แล้วกล่าวว่า แต่อย่างจริงจัง Visual Studio (โดยเฉพาะเครื่องมือแก้ไขข้อบกพร่อง) นั้นยอดเยี่ยมมากสำหรับเรื่องนี้

ฉันไม่ได้ใช้ C ++ มากในวันนี้ดังนั้นฉันจึงไม่แน่ใจว่าการนำไปใช้ที่นั่นดีเพียงใด แต่สำหรับ C # (รวมอยู่ใน C # Express) คุณมี:

และนี่อาจทำให้คุณคิด (มันจะระเบิดเมื่อฉันรู้เรื่อง):

หน้าต่างค้นหาทันทีเป็นชนิดที่หายากจริง ๆ (อยู่ในเมนูดีบั๊ก / Windows)

ข้อเสียที่สำคัญเพียงข้อเดียวในการใช้ดีบักเกอร์ Visual C # คือไม่ชอบเปลี่ยนconstค่า ดังนั้นฉันจึงมักจะทำให้ค่าที่เกี่ยวข้องกับการเล่นเกมของฉันstaticในขณะที่ฉันปรับพวกเขา

(เช่น: การมีสองจอภาพช่วยได้มาก)


ตอนนี้ฉันต้องยอมรับว่าวิธีการด้านบนนั้นเกี่ยวข้องกับการหยุดใบสมัครของคุณชั่วคราว

ในโอกาสที่หายากเหล่านี้สิ่งที่ฉันทำ (ใน XNA) คือการแฮ็กโค้ดเพียงเล็กน้อย (อาจใช้การแก้ไขและดำเนินการต่อไปตามที่กล่าวไว้ข้างต้น) เพื่อคว้าKeyboard.GetState().IsKeyDown()(จริงๆแล้วฉันมีเสื้อคลุมที่ง่ายกว่าสำหรับพิมพ์) ค่าตามการกดแป้น สิ่งที่ซับซ้อนกว่านั้นไม่คุ้มค่ากับความพยายาม


ในทางปฏิบัติสิ่งที่ฉันมักจะพบกันอย่างมากมายที่สำคัญคือความสามารถในการมากขึ้นเห็นภาพ (แทนที่จะแก้ไข) ค่าในเวลาจริง สำหรับเรื่องนี้ฉันมีชั้นเรียนเล็ก ๆ ที่ดีที่สามารถบัฟเฟอร์เส้นและข้อความที่จะวาดในตอนท้ายของเฟรม มันยังมีประโยชน์สำหรับการสร้างต้นแบบอย่างรวดเร็ว

(และอีกครั้งเป็นเรื่องดีที่สามารถ "แก้ไขและดำเนินการต่อ" การแสดงผลภาพเหล่านี้ในเวลารันไทม์)


(ที่มา: andrewrussell.net )
( จากที่นี่ )

ฉันกลัวว่าฉันไม่มีแหล่ง "ดี" ที่จะเผยแพร่ในขณะนี้ (อาจจะภายหลัง) แต่โดยพื้นฐานแล้วมันเป็นเพียงรายการของบรรทัด (สำหรับไลบรารี round line นี้ ) และสตริง (สำหรับ SpriteBatch ในตัวของ XNA) เพียงแค่ทำให้มันpublic staticอยู่ที่ไหนสักแห่งและวาดทุกอย่างด้วยการแปลงที่เหมาะสมเพื่อให้ทุกอย่างปรากฏใน "พื้นที่โลก" (แล้วล้างรายการสำหรับเฟรมถัดไป)


1

การเขียนระบบการสะท้อนกลับอย่างง่ายสำหรับ C / C ++ นั้นค่อนข้างเล็กน้อย วิธีนี้คุณสามารถเรียกดูตัวแปรทั้งหมดของคุณในเกม (ไม่ว่าจะด้วยเครื่องมือเครือข่ายแป้นพิมพ์หรือจอยแพด) และเปลี่ยนเป็นเนื้อหาในหัวใจของคุณ มันใช้งานได้สำหรับฉัน แต่คำตอบทั้งหมดข้างต้นนั้นใช้ได้อย่างเท่าเทียมกัน

แก้ไขเพื่อเพิ่ม: ตอนนี้เธรดนี้เกี่ยวกับการปรับแต่งไม่ได้ทำการดีบั๊กตามชื่อเธรด


0

ทางออกหนึ่งที่ฉันเห็นในสตูดิโอหลายแห่งคือแอพดีบั๊กภายนอกที่เชื่อมต่อกับโปรแกรมของคุณโดยใช้เครือข่าย แอพนี้แสดงตัวแปรที่เปิดเผยเฉพาะและอนุญาตให้คุณแก้ไขได้แบบเรียลไทม์ การเพิ่มตัวแปรใหม่เป็นเรื่องของการเพิ่มมาโครบางตัวในโค้ดเกม

การตั้งค่าเริ่มต้นของมาโครฝั่งเกม, โปรโตคอลเซิร์ฟเวอร์ / ไคลเอนต์ (โซลูชั่นที่ฉันเห็นมาเป็นอนุกรม xml ไปมา) และการเขียนไคลเอ็นต์มีขนาดใหญ่ อย่างไรก็ตามมันมีประโยชน์มากโดยเฉพาะอย่างยิ่งเมื่อใช้เครือข่ายเพื่อการสื่อสารหมายความว่าคุณสามารถทำงานบนแพลตฟอร์มใดก็ได้


0

ผูกการโหลดและการอ่านของตัวแปรลงใน textfile และเริ่มการทำงานโดยใช้การโยงหรือคำสั่งเฉพาะจากคอนโซล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.