Как я могу увидеть, где я могу ссылаться на нулевой указатель с помощью KDevelop?
Я использую KDevelop для разработки и отладки C++. Похоже, я где-то разыменовываю NULL-указатель, потому что я получаю:
*** Program received signal SIGSEGV (Segmentation fault) ***
Как я могу понять, где это произошло? Я хотел бы, чтобы KDevelop нарушал подобные сигналы и необработанные исключения.
2 ответа
Вы должны запустить приложение внутри отладчика. Нажмите кнопку " Отладка" в KDevelop, если у вас уже есть правильная конфигурация запуска.
В KDevelop это откроет представление области отладки и запустит приложение в GDB. После сбоя нажмите вид инструмента " Стек стека" на нижней панели.
Вот и ты.
В отличие от интерпретируемых языков, таких как Python, и языков, которые не допускают явного управления памятью и используют автоматический сбор мусора, таких как Java и C#, то, что вы запрашиваете, практически невозможно для C++ с любым редактором. Причина этого в том, что когда создается указатель, это просто указатель на адрес памяти. Невозможно проверить, правильно ли выделена память по указанному адресу и доступна ли она до тех пор, пока человек не попытается получить доступ к памяти через указатель. В целом, существует три основных категории ошибок:
1) синтаксис (это также подкласс второго ниже)
2) время компиляции
3) время выполнения.
В первом случае большинство современных IDE смогут отловить ошибку еще до того, как вы попытаетесь скомпилировать. Это ошибки, которые возникают из-за неправильного синтаксиса.
Во втором случае эти ошибки могут быть перехвачены во время компиляции (обычно это также ошибки, возникающие из-за неправильного синтаксиса, но не только; например, при обращении к статическому массиву вне диапазона эта ошибка будет возникать).
В третьем случае это ошибки, которые могут быть обнаружены только во время выполнения программы. То, о чем вы спрашиваете, относится к этому типу в C++.
Поэтому лучше всего запустить программу в режиме отладки. Отладчик, включенный в KDevelop, очень эффективен. Вы сможете явно отслеживать распределение / удаление памяти. Для получения дополнительной информации см. Здесь: http://userbase.kde.org/KDevelop4/Manual/Debugging_programs