По опыту оказалось, что самое результативное — это тупо ведение логов. Грамотных логов. SQL — отдельно. Дампы входящих данных и дампы результатов. И при грубых ошибках — call stack. И все. Только так получалось отлавливать ошибки у заказчиков, когда у него что-то случилось, а обнаружил он это через неделю и поднял вопль — выход один — идем телнетком на его хост и начинаем читать логи. Много логов. Развлечение может быть не на один день/неделю, но в результате, восстановив все, что происходило на его машине, получаем место, где ошибка и что же реально произошло.
Что бы хотелось… наверно — чтоб можно было эти логи впихнуть в некую play-back машину и наглядно видеть, что происходило, а не читать портянки с букофками-циферками, а глядеть на красивые екранчики, где перед взором пробегает вереница меняющихся циферок конкретно интересующих переменных, флагов, вызовов методов и т.п., и это было бы красиво форматировано, чтоб можно было бы выключить и не видеть то, что не интересует в данный момент, смотреть все с нужным уровнем детализации.