CDash Custom Динамический анализ
Я пытаюсь интегрировать пользовательские инструменты динамического анализа в CDash. Такие как KWStyle, CppCheck и Visual Leak Detector.
Я понял, что мне нужно сгенерировать файл DynamicAnalysis.xml и отправить его на CDash из скриптов CTest.
Я думаю, что знаю, как запустить внешний инструмент как часть скрипта ctest.
Либо с помощью этих переменных, чтобы изменить, как работает ctest_memcheck()
CTEST_MEMORYCHECK_COMMAND
CTEST_MEMORYCHECK_SUPPRESSIONS_FILE
CTEST_MEMORYCHECK_COMMAND_OPTIONS
или запустив инструмент из команды execute_process().
Но я немного не уверен, какой из них использовать.
Основная проблема, как мне кажется, заключается в том, как извлечь ошибки из выходных данных пользовательского инструмента и включить эту информацию в файл DynamicAnalysis.xml для отправки?
Крайнее решение, которое я вижу, заключается в том, что мне нужно создать программу, которая генерирует действительный файл DynamicAnalysis.xml.
Но проблема в том, что я не знаю синтаксис элемента DefectList в файле XML. Я не нашел ответа от Google, и даже XML-схема для этого файла бесполезна.
РЕДАКТИРОВАТЬ:
Глядя на это:
http://www.cdash.org/CDash/viewDynamicAnalysis.php?buildid=987149
Что привлекает мое внимание, так это этикетки, особенно пустые. Я не вижу, как они могут быть получены из файла DynamicAnalysis.xml. Может быть, он отслеживает какие-либо ярлыки, которые когда-либо появлялись? Могу ли я как-нибудь создать свои собственные ярлыки?
Создает ли CDash метки автоматически, в зависимости от типа инструмента? Блокирует ли это пользовательские типы дефектов?
Я просто догадываюсь здесь, поэтому вопрос в том; Могу ли я создать собственные метки для своего инструмента, просто сгенерировав файл DynamicAnalysis.xml.
Мне пришло в голову, что количество различных ошибок в CppCheck (статический анализ кода) огромно по сравнению, например, с valgrind. Я не уверен, что мне следует использовать динамический анализ. Может быть, лучше подойдет пользовательский тип сборки (Непрерывный / Экспериментальный / Ночной). Как это:
http://www.cdash.org/CDash/buildSummary.php?buildid=930174
Я понятия не имею, как это сделать, я думаю, что это требует вмешательства CDash-кода?
Какой из них будет работать лучше?
2 ответа
Из того, что я до сих пор узнал, является то, что для инструмента, который работает на тестах, выполненных в скрипте cmake, динамический анализ - это вещь.
Для инструментов, которые работают во всей программе, вам необходим пользовательский Build.xml.
Я обнаружил, что я могу зафиксировать эти файлы из команды ctest_submit с помощью параметра FILES.
Я также узнал, что вы можете добавить собственные "имена сборок" в сторону Continuous, Nightly и других.
И что вы можете настроить автоматическую передачу сборок с определенных машин под них.
Пользовательские ярлыки в Dynamic Analysis пришли откуда-то из CDash, я не могу вспомнить, где больше.
Если вы используете valgrind, вы можете просто установить для CTEST_MEMORYCHECK_COMMAND полный путь к valgrind, и ctest сгенерирует для вас файл DynamicAnalysis.xml из вывода valgrind при вызове ctest_memcheck.
Лучший способ понять возможные значения, которые могут появиться в файле DynamicAnalysis.xml, - это проанализировать исходный код CTest.
Файл CMake/Source/CTest/cmCTestMemCheckHandler.cxx содержит список типов дефектов в переменной с именем "cmCTestMemCheckResultLongStrings". Найдите в этом файле ссылки на эту переменную, чтобы увидеть возможные значения и то, как они используются для создания элементов
РЕДАКТИРОВАТЬ (для дополнительной информации):
Вы также можете легко увидеть, какие XML-элементы ожидает CDash, изучив его исходный код. В частности, файл "CDash/xml_handlers/dynamic_analysis_handler.php".