Проследяване стека с покана за грешка (с някои изключения)

Да започнем с това, ние се определи проследяване изключение класа с всички негови член-функции:

Сега няколко думи за това как работи и как тя zayuzat. В случай на супер-мега-фаталната ситуация, ние се генерира изключение на нашия тип:

След това изключение ще започнат да падат през всяка функция в набора от обаждане до main'a. Но това не е това, което ни трябва. Това всъщност е проследяване е необходимо за кода на всяка програма, като осигуряват обвивка:

Сега в свързан списък _exinfo-> TracePoints се съхраняват указатели към имената на всички функции, които участват в фатално веригата на повикване. Остава само да се изравнят по изключение и ще покаже съобщение за грешка:

За удобство, можете да напишете няколко макроси:

Ето един пример:

При изпълнението на тази програма ще покаже съобщение кутия тук с това съобщение:

Предимствата на този метод:
1) по-висока скорост в сравнение с други методи, тъй като проследяването се активира само когато възникне изключение. Не можете да деактивирате в следващата версия на програмата.
2) Позволява ви да получите много полезна информация за отстраняването й. Малко промяна на функцията на първоначалното започване на изключения, можете да спестите определен брой реда в кода, където е възникнала грешката.
3) е достатъчно удобен за използване, ако кодът е била първоначално предназначена за безследно.
4) Не е необходимо да се създаде ненужни предмети.
недостатъци:
1) Трудно е да се интегрират в който е вече написан код.
2) съгласно ANSI стандартни изключения не може да се комбинира с изключение Win32 в една и съща функция. Този недостатък може да се преодолее напълно, като отидете на Win32-изключване. Истината по този начин значително да усложни кода и е вероятно да намалите скоростта (аз се опитах да направя това).
3) Някои програмисти има неадекватен отговор на думата "изключение" :-).