docs.microsoft.com/en-us/visualstudio/debugger/...

я из Linux / gcc / clang, я все больше и больше работаю над Windows / Visual Studio.

Чего мне действительно не хватает, так это адресного дезинфицирующего средства (проверка границ, утечки, использование после освобождения, ...). Я провел некоторые исследования, а также попробовал несколько вещей, но не нашел замены, которая была бы полной (функциональной) и надежной. Я, например, попробовал Dr.Memory, но узнал, что он не работает для программ на базе Qt (по крайней мере, в Windows 10).

Так как же получить дезинфицирующее средство для адресов в Windows / MSVC?

 Velkan11 дек. 2017 г., 15:08
Если msvc не является сложной задачей, разработайте и проверьте Linux, а затем выполните кросс-компиляцию с помощью gcc и MXE / mingw и т. Д. Если вы получили библиотеку с закрытым исходным кодом, скомпилированную с msvc, тогда valgrind все еще работает с Linux + вином на этом.
 Frank Meerkötter11 дек. 2017 г., 19:26
Спасибо за ваш ответ, но я особенно заинтересован в том, чтобы описать функциональность в моем вопросе о msvs.

Ответы на вопрос(1)

ASan и Ubsan из clang должны работать на Windows с некоторыми ограничениями. Их можно использовать с набором инструментов msvc, использующим clang-cl в качестве замены для cl.exe - похоже, Googleработая над этимМозилласлишком.

Проблемы, о которых я знаю (и которые не позволяли мне использовать его до сих пор):

связывание с необходимыми библиотеками не происходит автоматически. Существует две их версии, в зависимости от того, как CRT связан в вашем приложении (/ MT означает статический CRT, / MD означает динамический CRT, последний обычно используется в Qt). Чтобы найти необходимые параметры компоновщика, откройте командную строку Visual Studio, добавьте папку clang bin в путь и скомпилируйте простой файл main.cpp (пустая основная функция) с подробными параметрами с помощью clang-cl, например:clang-cl -v /MD -fsanitize=address main.cpp Требуемая команда link.exe находится в конце подробного вывода, извлеките необходимые библиотеки для связывания оттуда.

в Windows поддерживаются только релизные сборки

нет поддержки исключений в Windows (см.это выпуск)

Похоже, что дальнейшая работа над портом Windowsвики например ужасно устарел (последнее изменение в 2015 году), поэтому я сомневаюсь, что многие люди используют это продуктивно. Так что получить помощь от других пользователей онлайн может быть довольно сложно ...

Говоря о других альтернативах на Windows, есть:

AppVerifier (идет с Windows SDK)Доктор памяти(в настоящее время не поддерживается в Windows согласнонекоторые комментарии на его трекере, это означает, что это, например, полностью непригоден для Qt и всех, кто использует инструкции SSE 4.2, смотритеВот а такжеВот )Intel Inspector (Коммерческий).

Sanitizers и Valgrind в Linux IMO намного более продвинуты и / или имеют гораздо лучшую производительность, чем эти инструменты, поэтому сохранение сборки приложений в Linux кажется лучшей идеей, по крайней мере, при работе с кроссплатформенным инструментарием, таким как Qt (как вы упоминаете) ).

 Adrian McCarthy02 февр. 2018 г., 19:56
Хорошие вещи в этом ответе. Также имейте в виду, что в библиотеки времени выполнения MSVC встроены довольно хорошие функции отслеживания динамической памяти, но вы должны включить их.docs.microsoft.com/en-us/visualstudio/debugger/...

Ваш ответ на вопрос