Обнаружение многосвязанной среды выполнения C в Windows
Вопрос
У меня возникли некоторые проблемы с одним из проектов, над которыми я работаю в Windows (64-разрядная версия).Программа иногда выходит из строя, иногда нет, и я подозреваю, что проблема связана с многосвязной средой выполнения C.Как я могу обнаружить это в Windows?Я попытался с помощью depends.exe, но он не сообщил о CRT
Решение
Маловероятно, что вы могли бы успешно статически связать несколько библиотек среды выполнения C - вы столкнулись бы со многими конфликтами определения символов, которые, по крайней мере, выдали бы объемные предупреждения, и только безрассудный инженер проигнорировал бы их.
С depends
, Я бы обязательно использовал опцию динамического профилирования, чтобы проверить все зависимости для динамических CRTLS, которые они загружают.Если ничего не обнаружится, я подозреваю, что ваша проблема в другом.
Я бы заподозрил, что ваша проблема в любом случае в другом месте, поскольку библиотеки DLL с API уровня C, как правило, не должны полагаться на общее состояние в CRTL - чаще всего распределителе памяти - и должны использовать стандартизированный протокол для управления памятью через API, такой как выделение вызывающего абонента, использование вызываемого абонента или передача обратных вызовов выделения памяти и т.д.Другими словами, несколько CRTLS в одном процессе обычно не являются проблемой из-за правильного использования протокола управления памятью.
В случае временных сбоев я бы заподозрил многопоточность или повреждение кучи.