У меня возникли проблемы с повреждением памяти в довольно большом проекте по управлению некоторым научным оборудованием (около 6000 строк), и я не уверен, какой лучший способ/инструмент для решения проблемы. В проекте используется Qt 4.8, и он создан с помощью QtCreator и MinGW. Программа более-менее работает, но у меня проблемы со стабильностью. Иногда я получаю случайные сбои, но в некоторых случаях, когда я немного изменяю исходный код, программа падает точно в том же месте (там, которое работало ранее). Позиция, которую он выбрал на этот раз, выглядит так:
char stages2[1024];
sprintf(stages2, "M-511.DD.LOAD\nNOSTAGE");
Вторая строка дает ошибку сегментации (SIGSEGV), когда я запускаю ее в gdb, что говорит мне о какой-то проблеме с памятью программы, потому что я уверен, что эти две строки верны. Кроме того, «место сбоя» меняется в зависимости от точного исходного кода; Я даже видел сбои в Windows DLL, которые использует Qt.
Я рассмотрел несколько вариантов, чтобы найти причину проблемы, но столкнулся с некоторыми трудностями:
- Я скачал DUMA, но никак не могу его скомпилировать на MinGW - мне пришлось изменить команду включения, чтобы создать библиотеку, но теперь одна из тестовых программ дает сбой. (Любые подсказки или ссылки на двоичные файлы, кто-нибудь?)
- Я также пробовал Application Verifier, но когда я запускаю его, он всегда останавливается в одной и той же позиции, где сторонний DLL, который я использую, пропускает дескриптор. Я достаточно уверен, что это не причина моих проблем, но я не могу продолжать процесс отладки, потому что gdb всегда возвращается в одно и то же положение (он застревает там только тогда, когда я использую средство проверки приложений).
- Наконец, я запустил свою программу с помощью Dr. Memory, но она просто вылетает, не дойдя до главного окна, не давая мне никаких полезных результатов (единственное, что я вижу, это то, что Qt явно тратит немного памяти).
Я был бы очень признателен за совет о том, какой самый многообещающий метод, чтобы наконец избавиться от этой ошибки.