Прерванное ядро ​​сброшено C ++ - PullRequest
2 голосов
/ 28 апреля 2010

У меня есть большая функция C ++, которая использует библиотеку OpenCV и работает в Windows с компилятором cygwin g ++. В конце он выдает Aborted (ядро выгружено), но до этого функция полностью запускается. Я также попытался поместить оператор печати в конец функции. Это также печатается. Так что я думаю, что в коде нет логической ошибки, которая будет генерировать ошибку.

Пожалуйста, объясните.

Я также использую операторы assert. Но прерванная ошибка не связана с оператором assert. Это не говорит о том, что утверждение не удалось. Он заканчивается только без сообщений.

Этот файл также является частью большого проекта, поэтому я не могу опубликовать код.

GDB результаты:

Program received signal SIGABRT, Aborted.
0x7c90e514 in ntdll!LdrAccessResource () from /c/WINDOWS/system32/ntdll.dll

Ответы [ 4 ]

2 голосов
/ 28 апреля 2010

Это похоже на ошибку памяти (запись в освобожденную память, двойное освобождение, переполнение стека, ...). Когда код можно скомпилировать и запустить под Linux, вы можете использовать valgrind, чтобы увидеть, есть ли проблемы с памятью. Также вы можете попытаться отключить части приложения, пока проблема не исчезнет, ​​чтобы понять, где происходит ошибка. Но этот метод также может давать ложные срабатывания, поскольку ошибки, связанные с памятью, могут привести к сбою модулей, которые не являются причиной ошибки. Также вы можете запустить программу в GDB. Но и здесь позиция, на которую указывает отладчик, может не совпадать с позицией, в которой произошла ошибка.

0 голосов
/ 28 апреля 2010

Загрузите дамп ядра вместе с двоичным файлом в gdb, чтобы понять, в каком месте находится список проблем. Командная строка:

gdb <path to the binary> <path to the core file>

Подробнее о GDB см. GDB: отладчик проекта GNU .

0 голосов
/ 28 апреля 2010

Запустите его через AppVerifier и cdb .

1007 * Е.Г. *

cdb -xd sov -xd av -xd ch <program> <args>
0 голосов
/ 28 апреля 2010

Ты не даёшь нам многого, чтобы продолжать. Тем не менее, похоже, что вы сталкиваетесь с некоторыми проблемами при освобождении ресурсов. Может быть, куча коррупции. Вы пытались запустить его под GDB, а затем посмотреть, где он падает? Также проверьте, совпадают ли все ваши новые / удаленные вызовы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...