Kỹ thuật gỡ lỗi thời gian thực


18

Không có gì giống như thói quen chỉnh sửa một biến, biên dịch mã mất vài phút, thực thi mã, nhận ra rằng chỉnh của bạn đã sai hướng và lặp lại quá trình một lần nữa.

Tôi muốn bắt đầu tương tác với logic trò chơi của mình trong khi phiên đang diễn ra. Một số cách bạn đã xử lý làm điều này là gì?

Tôi sẽ được mở để nghe các giải pháp cho iOS, C / C ++ và C # / XNA.

Câu trả lời:



4

Tích hợp một ngôn ngữ được giải thích đầy đủ có thể cho phép bạn viết lại các yếu tố trò chơi rất, rất dễ dàng.

Python, Lua, v.v ... đều có thể được sử dụng rõ ràng cho việc này. Angel Engine có lẽ có thể phục vụ như một ví dụ.

Tải nóng là một yếu tố khác cần kiểm tra (về cơ bản, một sự kiện được kích hoạt cho bạn biết một tài sản đã thay đổi - tệp cấu hình, yếu tố nghệ thuật, v.v .-- và bạn chạy nó thông qua một loạt các điều hòa sửa đổi nó cho định dạng cuối cùng trước khi thay thế hiện tại bằng cái mới.

Tôi đã làm việc với một công cụ tạo mẫu nhanh sử dụng tải nóng và đó là một niềm vui.


2

Cũng như liên quan đến C ++, C # và C # với XNA, Visual Studio có các công cụ gỡ lỗi tuyệt vời - tạm dừng ứng dụng theo thời gian thực tại bất kỳ điểm nào trong mã, xem các giá trị được gán cho biến bất kỳ lúc nào, từng bước gọi hàm , phân tích ngăn xếp cuộc gọi, và nhiều hơn nữa. Ngoài ra, các công cụ như Pix và CLR Profiler giúp phát triển với các ngôn ngữ dựa trên DirectX (Pix) và CLR (CLR Profiler).

Ngoài ra, một phần đặc biệt hữu ích khi làm việc với các trò chơi là chúng ta có khu vực khổng lồ này để viết văn bản gỡ lỗi, đồ họa, v.v. Đồ thị thời gian thực của việc sử dụng bộ nhớ, số lượng đối tượng / đỉnh được vẽ, tốc độ khung hình, v.v ... là những thứ phổ biến để vẽ lên màn hình.


1
Trong khi VS là một công cụ phát triển nổi bật, việc gỡ lỗi thông thường cần có thời gian - tìm kiếm các điểm dừng, bước qua mã, thay đổi biến, khởi động lại luồng. Câu hỏi này đang tìm kiếm một cách tức thời để thực hiện những việc như di chuyển một thành phần giao diện hoặc điều chỉnh tỷ lệ tấn công của ông chủ, v.v.
David McGraw

2

Trong C / C ++, một mẹo đơn giản là đặt khả năng điều chỉnh của bạn vào một biến tĩnh, kích hoạt điểm dừng, thay đổi tĩnh trong trình gỡ lỗi và nó vẫn tồn tại cho đến khi thoát.


Làm cho nó một biến tĩnh bên trong một chức năng mặc dù. Nếu đó là một studio trực quan tĩnh toàn cầu có thể không thể hiển thị giá trị của nó.
Kaj

2

Ghi nhật ký HTTP là một trợ giúp lớn và không khó để bắt đầu và chạy. Bạn thậm chí có thể sử dụng công cụ Ứng dụng Google như một cách nhanh chóng để chạy ứng dụng này. Dữ liệu luôn hữu ích.

Các tập lệnh & XML này có thể được tải lại nhanh chóng và không yêu cầu thiết lập lại. Cho phép họ thất bại mà không làm giảm trò chơi. Điều này mang lại rất nhiều sức mạnh cho các nghệ sĩ, người thử nghiệm và nhà thiết kế.

Menu gỡ lỗi trong trò chơi Một menu gỡ lỗi đơn giản trong trò chơi mà bạn có thể sinh ra khi còn nhỏ và đóng băng trò chơi bằng cả thanh trượt động cơ và thanh trượt trò chơi. Cho phép bạn điều chỉnh các số chính trong thời gian chạy và có thể thực hiện một hoặc hai chức năng gỡ lỗi hoặc kết xuất thông tin.

Tôi cũng thích ổ cắm ASYNC như được đề cập trong câu trả lời của David

Dễ sử dụng Nhóm trò chơi của bạn phải có thể thêm vào các công cụ này và sử dụng chúng rất dễ dàng, nếu không chúng sẽ không được sử dụng.


2

Tôi biết Sean James đã nói điều đó . Nhưng nghiêm túc, Visual Studio (cụ thể là các công cụ gỡ lỗi) là tuyệt vời cho việc này.

Tôi không sử dụng C ++ nhiều trong những ngày này, vì vậy tôi không chắc những ứng dụng này được áp dụng tốt như thế nào. Nhưng đối với C # (bao gồm trong C # Express), bạn có:

  • Chỉnh sửa và tiếp tục - nơi bạn có thể thực hiện các thay đổi bán buôn cho logic trò chơi của mình.
  • Các Xem Window - nơi bạn có thể xem và chỉnh sửa các biến một cách dễ dàng.

Và điều này có thể thổi bay tâm trí của bạn (nó đã thổi bay tôi khi tôi phát hiện ra điều đó):

Cửa sổ ngay lập tức thực sự khó tìm (nó nằm trong menu Gỡ lỗi / Windows).

Nhược điểm lớn duy nhất khi sử dụng trình gỡ lỗi Visual C # là nó không thích thay đổi constgiá trị. Vì vậy, tôi thường chỉ tạo ra các giá trị liên quan đến trò chơi của mình statictrong khi tôi điều chỉnh chúng.

(Ngoài ra: có hai màn hình giúp ích rất nhiều.)


Bây giờ tôi phải thừa nhận rằng phương pháp trên liên quan đến việc tạm dừng ứng dụng của bạn - có thể chậm một cách không thỏa đáng đối với một vài điều đặc biệt khó hiểu.

Trong những dịp hiếm hoi này, những gì tôi làm (trong XNA) chỉ đơn giản là hack một chút mã (có thể sử dụng Chỉnh sửa và Tiếp tục, như trên) để lấy Keyboard.GetState().IsKeyDown()(thực ra tôi có một trình bao bọc dễ gõ hơn cho việc này) và điều chỉnh giá trị bằng tổ hợp phím. Bất cứ điều gì phức tạp hơn không đáng để nỗ lực.


Trên thực tế những gì tôi thường thấy bao la quan trọng hơn là có khả năng hình dung (chứ không phải modify) giá trị trong thời gian thực. Đối với điều này, tôi có một lớp nhỏ đẹp có thể đệm các dòng và văn bản sẽ được vẽ ở cuối khung. Nó cũng hữu ích cho việc tạo mẫu nhanh.

(Và, một lần nữa, thật tuyệt khi có thể "Chỉnh sửa và tiếp tục" những hình ảnh này trong thời gian chạy.)


(nguồn: andrewrussell.net )
( từ đây )

Tôi e rằng tôi không có nguồn "đẹp" để xuất bản vào lúc này (có thể sau này). Nhưng về cơ bản, nó chỉ là một danh sách các dòng (cho thư viện đường tròn này ) và các chuỗi (cho SpriteBatch tích hợp của XNA). Chỉ cần đặt nó public staticở đâu đó và vẽ mọi thứ với một biến đổi phù hợp để mọi thứ xuất hiện trong "không gian thế giới" (và sau đó xóa danh sách cho khung tiếp theo).


1

Viết một hệ thống phản ánh đơn giản cho C / C ++ là khá nhỏ. Bằng cách này, bạn có thể duyệt qua tất cả các biến của mình trong trò chơi (có thể bằng công cụ mạng, bàn phím hoặc joypad) và thay đổi chúng theo nội dung trái tim của bạn. Nó hoạt động với tôi, nhưng tất cả các câu trả lời ở trên đều có giá trị như nhau.

Chỉnh sửa để thêm: Chủ đề này bây giờ là về tinh chỉnh, không gỡ lỗi theo tiêu đề chủ đề.


0

Một giải pháp tôi đã thấy trong nhiều studio là một ứng dụng gỡ lỗi bên ngoài gắn vào chương trình của bạn bằng cách sử dụng mạng. Ứng dụng này hiển thị các biến tiếp xúc cụ thể và cho phép bạn chỉnh sửa chúng trong thời gian thực. Thêm các biến mới là vấn đề thêm một số macro vào mã trò chơi.

Thiết lập ban đầu của các macro phía trò chơi, giao thức máy chủ / máy khách (các giải pháp tôi thấy chỉ là xê-ri xml qua lại) và viết ứng dụng khách, là lớn. Tuy nhiên, nó cực kỳ hữu ích, đặc biệt là khi sử dụng mạng để liên lạc có nghĩa là bạn có thể làm việc trên bất kỳ nền tảng nào.


0

Liên kết tải và đọc biến vào tệp văn bản và kích hoạt nó bằng cách sử dụng một phím hoặc lệnh cụ thể từ bàn điều khiển.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.