Win 7 x64, lazarus 0.9.30/2.4.4
Предистория: была написана программка (консольная), довольно большая, запутанная и многопоточная.
Писал для делфи 7, возникла необходимость откомпилить под 64 бита, для чего и был использован лазарус. Откампилил (все использованные структуры и размеры переменных выровнены и тд). В целом - работает, но не непонятных обстоятельствах (по наблюдениям) когда паралельно начинают два потока что-то делать - все просто падает (программа завершается) либо вылазит ошибка SIGSEGV но окно местного отладочника вообще ничего не дает, могу только регистры посмотреть, даже заглянуть в дамп не могу - что же там происходит.
И такие действия я заметил на казалось бы самых безобидных операциях (во втором просто кручу циклы типа ReadDirectoryChangesW и при копировании файлов в эту папку прога вылетает). Я даже убрал все полезные действия, но все равно с Н-ноый попытки копирования удается получить падение.
Что плохо - то что на 32 битах она работает стабильно - рядом компилишь делфи32 и в путь, все ок. То есть я уверен что потоки засинхроонизированны и тд. Сделал отладку шагов в файл (тоже синхронизация, все дела). И закономерности не обнаружил, т.е. паралельно скидывают лог два потока и "последняя" запись может быть хоть того хоть того потока и всегда разная. То есть какая-то неведомая сила вырубает его.
Все дело запускаю под windbg и вирт. машину. Дак вот, этот отладочник так не же ловит исключение и соотв. программа просто "падает" - но предварительно появляется окно "отладить программу, завершить" и еще что-то такое (запускаю конечно в этом случае не из среды, а просто двойным кликом).
Еще прикол, что если где-то в начале проги поставить int 3 то windbg ловит это (при запуске дв. кликом), а вот эксепшн почему-то пропускает.
Вопрос: как отловить исключение?
Отладочник меня отправляет (не всегда) на кусок памяти (раздизасмил, опыт есть достаточный), но вообще как-будто не причем).