у вас есть много хороших ответов. самые дикие проблемы, которые мне приходилось преследовать, связаны с такими проблемами, как Барри. Я видел, как что-то происходило с разделом «Размеры памяти» проекта на странице линкера. я мог бы быть суеверным, но казалось, что больше не обязательно лучше. Вы можете рассмотреть возможность использования расширенного менеджера памяти FastMM4 - это бесплатно и очень полезно.
http://sourceforge.net/projects/fastmm/
Я использовал его с d7 и нашел некоторый доступ к устаревшим указателям и другим злым вещам.
Вы также можете захотеть создать способ отслеживания действительных объектов и / или инструментировать код другими способами, чтобы код сам проверял, как он работает.
когда я вижу доступ к адресам вроде 0x00001000 или меньше, я думаю о доступе к нулевому указателю. myStringList: = ноль; myStringList.Clear;
когда я вижу доступ к другим адресам с гораздо большими числами, я думаю о устаревших указателях.
когда что-то странно нестабильно и следы стека оказываются бессмысленными и / или сильно меняющимися, я знаю, что у меня проблемы со стеком. один раз это в Controls.pas; в следующий раз это в mmsys.pas и т. д.
использование неверного соглашения о вызовах для DLL может также сильно испортить ваш стек. это связано с передачей / освобождением параметров при вызове / возврате из DLL.
MadExcept поможет найти источник этого, даже если он показывает бессмыслицу ... вы выиграете в любом случае, потому что будете знать, где возникает проблема, или вы будете знать, что у вас проблема со стеком.
есть ли какие-либо рамки тестирования, которые вы можете использовать для их проверки? я обнаружил, что это очень мощный, потому что это делает его полностью воспроизводимым.
Таким образом, я исправил довольно неприятные проблемы.