После того, как я буквально споткнулся о Jinx, пока копался в Google, я проходил бета-тестирование и предварительные бета-тесты с достаточным количеством использования уже под моим пристальным вниманием. Как и в случае с любыми комментариями, относящимися к бета-версии, имейте в виду, что все может измениться или уже изменилось, поэтому имейте это в виду и принимайте следующее с недоверием.
Итак, просматривая список вопросов один за другим:
1) Установить и перейти. Jinx добавляет панель управления в Visual Studio, которую вы в основном можете игнорировать, так как настройки по умолчанию обычно подходят для большинства случаев. В противном случае вы просто работаете нормально и забудете об этом. Jinx не обрабатывает ваш код, не требует каких-либо дополнительных библиотек или множества других вещей, которые требуются для некоторых инструментов.
2) Вопрос о «интуитивном» действительно остается за пользователем. Если вы понимаете многопоточный код и возможные ошибки, Jinx просто делает эти ошибки более частыми, что само по себе является огромным преимуществом для людей, создающих многопоточный код. В то время как Jinx пытается остановить код в состоянии, которое делает проблему настолько очевидной, насколько это возможно, «очевидный» и «интуитивный» действительно зависит от навыков программиста.
3) Полезно? Любой, кто делал многопоточный код раньше, знает, что состояние гонки может происходить регулярно или раз в месяц на основе подсчета космических лучей, что случайность делает отладку многопоточного кода очень сложной. С Jinx, даже самые незначительные условия гонки могут быть воспроизведены обычно на первом пробеге последовательно. Это работает даже для кода без блокировки, который обычно пропускают другие инструменты статического анализа или инструментов.
Этот вид быстрого воспроизведения проблем удивительно полезен. Jinx помог мне отследить ошибку типа «одна инструкция в неправильном месте», которая на самом деле чаще всего встречалась раз в неделю. Джинкс заставил сбой произойти почти сразу и позволил мне сосредоточиться на действительной причине ошибки, а не находиться в полной темноте относительно реального источника.
4) Интеграция с Jinx очень проста. Если вы не против, чтобы ваша машина стала работать немного медленнее, вы можете попросить Джинкса наблюдать за всей машиной. Это замедляет работу машины, поскольку на самом деле она наблюдает за всем на машине, включая ОС. Хотя это интересно и полезно, если ваше программное обеспечение состоит из нескольких процессов на одном компьютере, это не рекомендуется, так как работать с ним может быть болезненно.
Вместо того, чтобы использовать глобальную систему, добавление include и двух строк кода выполняет основную работу, необходимую для регистрации процесса в Jinx, так что Jinx может просматривать только зарегистрированные элементы. Вы можете помочь Jinx, используя специальные утверждения Jinx и регистрируя области кода, которые являются более важными. В случае вышеупомянутого сбоя мне не пришлось ничего делать, и Jinx обнаружил проблему без дополнительной работы по интеграции. В любом случае интеграция предельно проста.
После использования Jinx в последние пару месяцев я должен сказать, что в целом это было очень приятно. Я больше не буду писать новый многопоточный код без Jinx, работающего в фоновом режиме, просто потому, что он выполняет запланированную работу по немедленному утверждению / сбоям. Как уже упоминалось, вещи, которые вы могли бы провести неделями, не видя, становятся проблемами почти сразу, это замечательная вещь во время первоначального тестирования и реализации.
КРФ