Это необычный вопрос, который нужно задать, но вот он:
В моем коде Я случайно где-то разыменую NULL. Но вместо того, чтобы приложение вылетало из-за ошибки segfault, похоже, что оно останавливает выполнение текущей функции и просто возвращает управление пользовательскому интерфейсу. Это затрудняет отладку, потому что обычно я хотел бы получить предупреждение о сбое, чтобы я мог подключить отладчик.
Что могло быть причиной этого?
В частности, мой код является драйвером ODBC (то есть DLL). Мое тестовое приложение - это ODBC Test (odbct32w.exe), которое позволяет мне явно вызывать функции ODBC API в моей DLL. Когда я вызываю одну из функций с известным segfault, вместо сбоя приложения ODBC Test просто возвращает управление пользовательскому интерфейсу без вывода результата вызова функции. Затем я могу снова вызвать любую функцию в моем драйвере.
Я знаю, что технически приложение вызывает диспетчер драйверов ODBC, который загружает и вызывает функции в моем драйвере. Но это не относится к делу, так как мой segfault (или что-то еще) приводит к тому, что функция диспетчера драйверов также не возвращает (о чем свидетельствует то, что приложение не выводит результат).
Один из моих коллег с похожей машиной испытывает эта же проблема, а другая - нет, но мы не смогли определить какие-либо конкретные различия.