Създаване и изпращане на отчет за срив [затворен]

Някой има ли предложения или уроци за създаване на доклади за сривове на програма? Искам да започна да изпращам на хората игра, която разработвам, но ако играта се срине поради обработка на грешки, искам да видя тези отчети на имейл адрес, който съм регистрирал (заедно с данните, събрани от програмата). Някой знае ли как се прави това?


person jack    schedule 16.02.2011    source източник
comment
Досега не сте приели много отговори. Какво ме кара да мисля, че този път ще успея да те задоволя?   -  person David Heffernan    schedule 17.02.2011
comment
Моето малко усилие: търсене в SetUnhandledExceptionFilter. Добре покрит в SO.   -  person Hans Passant    schedule 17.02.2011
comment
Дейвид Хефернан, много от отговорите не са по темата и се отклоняват от това, което питам.   -  person jack    schedule 17.02.2011
comment
Вижте също stackoverflow.com/questions/1547211/, stackoverflow.com/questions/5028781/ или stackoverflow.com/questions/132116/   -  person Suma    schedule 09.03.2011
comment
Пишете няколко пъти в коментарите, че искате да пуснете свои. Изглежда ви е трудно да приложите това. Можете ли да посочите някои причини, поради които не желаете да използвате нещо, което вече е внедрено?   -  person Suma    schedule 09.03.2011


Отговори (5)


АКО използвате Visual Studio 2010, можете да използвате вграденото отчитане на грешки. След това можете да се регистрирате в Microsoft, вижте http://msdn.microsoft.com/en-us/isv/bb190483

person Boofhead    schedule 17.02.2011
comment
Предпочитам да се прехвърля сам, знаете ли дали информацията за доклада за срив, която генерират за това, се генерира чрез някаква функционалност, която е изложена на програмисти? - person jack; 17.02.2011
comment
Отчитането на грешки в Windows определено е много по-лесно за използване от хората, които ще тестват вашата игра (при условие, че използват поне Windows XP). За да започнете, трябва да похарчите около $100 за цифровия идентификатор и да подпишете някои документи с Microsoft, но ако възнамерявате да направите това сериозно, ще ви се отплати много бързо, тъй като ще получите много повече отчети, отколкото бихте получили по имейл ,. и докладите ще бъдат предварително сортирани за вас (сривовете, причинени от една и съща причина, ще бъдат групирани заедно). - person Suma; 09.03.2011

Най-простият начин да направите доклад за срив е да имате оператори try-catch във вашия код. Когато възникне изключение, вие създавате временен регистрационен файл, включващ типа изключение, класа на изходния код, функцията и реда, където е настъпил сривът, и данните на глобалните и локалните променливи/контейнери, някои от които трябва да включват въведените от потребителя данни.

Вие не изпращате регистъра на грешките по имейл, но вашата програма отваря порт и изпраща данните до сървър, който слуша непрекъснато предварително зададен порт за доклади за грешки.

По-разширените отчети за грешки могат да включват дъмп на паметта и стойностите на регистрите. За да прочетете стойностите на паметта по бърз и мръсен начин е да използвате указател, който ще прочете итеративно стойностите на областта на стека. За стойностите на регистъра можете да използвате ключовата дума asm.

person Vasilis    schedule 17.02.2011
comment
Къде поставяте тези изявления за опит и улавяне? Също така искате да помислите дали да не покажете на потребителя какво изпращате обратно към базата, за да могат да проверят дали не крадете тяхната лична информация (напр. данни за кредитна карта и т.н.) - person David Heffernan; 17.02.2011
comment
Вместо да се опитвате да напишете свой собствен код, за да направите това, ще има смисъл да използвате един от многото налични готови инструменти, за да свършите работата. - person David Heffernan; 17.02.2011
comment
Прав си за чувствителната информация, но тъй като това е игра, предположих, че информацията ще бъде най-вече ниво на етапи, позиция на курсора и т.н. Разбира се, човек може да използва готови инструменти, но като програмист отговорих как бих го приложил. Такъв инструмент обаче би бил наистина добър вариант. - person Vasilis; 17.02.2011
comment
Василис: Имате ли пример как да направите По-разширените отчети за грешки могат да включват дъмп на паметта и стойностите на регистрите. За да прочетете стойностите на паметта по бърз и мръсен начин е да използвате указател, който ще прочете итеративно стойностите на областта на стека. За стойностите на регистъра можете да използвате ключовата дума asm.. - person jack; 18.02.2011
comment
Дейвид Хефернан: Бих искал да програмирам своя собствена. - person jack; 18.02.2011

Можете да използвате функцията MiniDumpWriteDump от Помощна библиотека за отстраняване на грешки за създаване на dump файл с дъмповете на стека от всяка нишка. Вярвам, че след това можете да отворите файла във Visual Studio и да го видите в програмата за отстраняване на грешки (или близо до това).

person shf301    schedule 17.02.2011
comment
Знаете ли за начина, по който мога след това да си изпратя имейл с тази информация? - person jack; 17.02.2011
comment
Той просто създава файл, така че можете да го изпратите като прикачен файл или да го качите. Ако търсите имейл библиотека, това е друг въпрос. - person shf301; 17.02.2011

Има добър примерен код в блога на Maciej Sinilo (той също е програмист на игри). Кодът включва как да получите информация от срива (напр. дали е невалидно четене или запис) и стека за извикване или минисметката. Това беше достатъчно, за да започна да добавям манипулатор на сривове към нашата система за тестване.

Надявам се това да помогне.

person celion    schedule 17.02.2011

ако искате някакъв вид докладване за грешки извън кутията чрез интернет, трябва да разгледате EQATEC анализ

който има наличен C++ интерфейс.

person Jasper    schedule 17.02.2011
comment
Бих искал да навия своя, но ти. - person jack; 17.02.2011