Проверил новую версию программы под Windows - все работает нормально. Сразу делаю релизный билд под Linux, запускаю и получаю ошибку "Project XYZ raised exception class Segmentation fault (11)". Как это? Что это?
Запускаю программу под отладкой под Linux и нахожу виновника ошибки. Им оказывается метод определения кодировки:
Паника... Паника... Под Windows же все работало... И черт меня дернул проверить версию под Linux, проверил бы в понедельник... Скорее всего виноваты кривые руки разработчиков Delphi, и метод GetBufferEncoding просто не работает под Linux... Смотрю реализацию GetBufferEncoding - никакой зависимости от операционной системы. Так... Руки разработчиков Delphi реабилитированы...
Паника... Паника... Все .NET-разработчики уже ушли и я в офисе один, как дурак со своим Delphi и Linux... Запускаю отладку под Linux снова... и сползаю со стула - в переменной Encoding уже есть какой-то адрес. Кто ты? А в ответ тишина - мусор по данному адресу разговаривать со мной отказывается. Метод GetBufferEncoding не только возвращает результат в переменную Encoding, но и использует ее для определения кодировки, если она имеет значение отличное от nil. Под Windows компилятор инициализировал переменную Encoding пустым указателем сам, а под Linux оказывается это нужно было сделать программисту.
В том, что я не инициализировал переменную Encoding пустым указателем я, конечно, не виноват. Логично, что виноват компилятор Delphi под Linux - никакой заботы об удобстве программиста!
Баг исправлен. Виновные назначены. Можно спокойно идти домой.
Запускаю программу под отладкой под Linux и нахожу виновника ошибки. Им оказывается метод определения кодировки:
Паника... Паника... Рабочий день уже давно закончен... Пятница... А ведь уже собрался выходить домой...var baBuffer: TBytes; Encoding: TEncoding; ... TEncoding.GetBufferEncoding(baBuffer, Encoding);
Паника... Паника... Под Windows же все работало... И черт меня дернул проверить версию под Linux, проверил бы в понедельник... Скорее всего виноваты кривые руки разработчиков Delphi, и метод GetBufferEncoding просто не работает под Linux... Смотрю реализацию GetBufferEncoding - никакой зависимости от операционной системы. Так... Руки разработчиков Delphi реабилитированы...
Паника... Паника... Все .NET-разработчики уже ушли и я в офисе один, как дурак со своим Delphi и Linux... Запускаю отладку под Linux снова... и сползаю со стула - в переменной Encoding уже есть какой-то адрес. Кто ты? А в ответ тишина - мусор по данному адресу разговаривать со мной отказывается. Метод GetBufferEncoding не только возвращает результат в переменную Encoding, но и использует ее для определения кодировки, если она имеет значение отличное от nil. Под Windows компилятор инициализировал переменную Encoding пустым указателем сам, а под Linux оказывается это нужно было сделать программисту.
В том, что я не инициализировал переменную Encoding пустым указателем я, конечно, не виноват. Логично, что виноват компилятор Delphi под Linux - никакой заботы об удобстве программиста!
Баг исправлен. Виновные назначены. Можно спокойно идти домой.
Комментариев нет:
Отправить комментарий