C Plus Plus
Advertisement

W przypadku gdy wyjątek rzucany jest głęboko z kodu często trudno jest wyśledzi dokładne miejsce jego rzucenia. W takiej sytuacji idealny byłby tzw. backtrace, czyli lista kolejno wołanych funkcji, aż do tej która rzuciła wyjątek.

Można to zrobić na kilka sposobów: jeden (nieprzenośny) to wykorzystanie API systemu operacyjnego, np. nagłówka execinfo.h i funkcji backtrace() pod Linuksem.

Drugie podejście to wykorzystanie funkcji obsługi ABI dostarczanych wraz z kompilatorem i ręczna analiza stosu. Paweł 'Pluto' Sikora zaczął implementować to podejście w swojej bibliotece [1].

ABI kompilatora dostarcza także funkcji do 'demanglowania' nazw symboli uzyskiwanych np. za pomocą typeid(foo).name()

Advertisement