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