Вот смотрите. Есть такая вещь, как data breakpoint. Позволяющая отловить момент, когда какой-то урод испортил мои красивые данные в памяти, и поставить брекпойнт, который сработает в этот момент и укажет на урода.
CL, конечно же, всем прекрасен. Но для Си такая технология есть, а для CL её нет. Во всяком случае, её нет в Lispworks, SBCL и CCL. Отсутствие этой технологии является большим упущением в конкурентной борьбе, потому что эта возможность нужна (и не нужно это оспаривать).
Так вот, я сегодня посвятил большую часть дня изучению вопроса о том, что можно сделать, и у меня получился
Есть добровольцы доделать? Нужно вот что:
1. Отлавливать движение объекта при сборке мусора и переставлять брекпойнт, в чём отчасти поможет *after-gc-hooks*
2. Отключать брекпойнт на время сборки мусора.
Считайте пп 1-2 головоломкой - я думаю, что она имеет решение.
3. Другие места, а не только aref для строки