В моей практике, очень редко встречается ситуация, когда мне нужен дебагер (за полгода, ну может быть один раз). Обычно ошибки очевидны.
В данном примере, происходит имитация ситуации, когда передается пустая ссылка на спрайт, который мы хотим добавить.

Код AS3:
package ru.inils.sample {
/* IMPORT *///{ /
import flash.display.*;
import ru.inils.logger.*;
//}
public class NewClassMain extends Sprite {
/* * CONSTRUCTOR * *///{ /
public function NewClassMain () {
var s:Sprite;
test (s);
}
//}
/* - METHOD PRIVATE *///{ /
private function test (s:Sprite):void {
addChild (s);
}
//}
}
}
Соответственно, я получаю RTE

Код:
TypeError: Error #2007: Параметр child не должен быть равен нулю.
at flash.display::DisplayObjectContainer/addChild()
at ru.inils.sample::NewClassMain/test()[D:\_Library\_Work\classes.as3\personal\ru\inils\sample\NewClassMain.as:15]
at ru.inils.sample::NewClassMain()[D:\_Library\_Work\classes.as3\personal\ru\inils\sample\NewClassMain.as:10]
Я его копирую, и вставляю в окно своего логгера Logger:Trace

Логгер парсирует текст и в окно Logger:Stack вставляет стек вызова. Далее, я делаю дабл клик по строкам и разбираюсь почему s был null.
Конечно, данный случай простой и ошибка очевидна. Но RTE у меня случаются редко и как правило такие.
Обычно, ошибки у меня в самом алгоритме, и те трейсы помогают вести полный лог изменений во времени и дают полную картину изменений.
Например, недавно я писал код, где одна область входила в другую и при этом должна была соответствовать ряду правил. Для проверки работы алгоритма, я вызывал тестовую функцию, которая эти правила проверяла и и выводила результат. Если где-то правило не срабатывало, выводился ошибка.
Вот пример имитации (не то, что я делал, а сама суть работы) ошибки

Код AS3:
package ru.inils.sample {
/* IMPORT *///{ /
import flash.display.*;
import ru.inils.logger.*;
//}
public class NewClassMain extends Sprite {
/* * CONSTRUCTOR * *///{ /
public function NewClassMain () {
Logger.port = 3040;
for (var i:int = 0; i < 10; i++) {
var s:Sprite = new Sprite ();
if (i == 7) {
s = null;
}
test (i, s);
}
}
//}
/* - METHOD PRIVATE *///{ /
private function test (i:int, s:Sprite):void {
try {
Logger.trace (i, true)
addChild (s);
} catch (error:Error) {
Logger.trace (i, false)
Logger.traceError (error);
}
}
//}
}
}
После чего, я анализировал проблемный участок и устранял ошибку.
Порой, причина ошибки кроется в действиях задолго до ее появления. А трейсы помогают все эти действия фиксировать и возвращаться к ним в случаях надобности.