Тест покрытия кода с помощью BullsEye

Я использую Bullseye для теста покрытия кода с некоторым кодом C. Я успешно оснастил свой код C с помощью Bullseye. Затем я попытался разобрать его, чтобы посмотреть, что там внутри.

Я ожидал, что в every control transfer location должна быть вставлена ​​какая-то тестовая функция. Например, for, if, while и т. д. Но, к моему удивлению, я вижу только a single probe at the the beginning of each of my functions. Такой как этот:

введите здесь описание изображения

Так как же этот единственный зонд мог отследить все передачи управления?

И когда я просматриваю собранные данные о покрытии, все мои контрольные передачи фиксируются как не покрытые. Только точка входа в функцию отмечена как закрытая.

Я неправильно настроил Bullseye, поэтому приведенный выше снимок экрана является только грубым function coverage? Если да, то как настроить Bullseye для детального покрытия на основе передачи управления?


person smwikipedia    schedule 19.04.2018    source источник


Ответы (1)


Хорошо, я понял это.

Инструментированный код выглядит так:

#pragma bss_seg(push,".covbss")
static struct cov_V_d934b203 cov_v_d934b203;
#pragma bss_seg(pop)
#pragma const_seg(push,".covconst")
static const struct cov_O_d934b203 cov_o_d934b203 = {
0x5a6b7c8d, 0x6b54972d, &cov_v_d934b203, 0x254972d, cov_V_d934b203_n, "CpuPeimTest.obj 21Apr18 22:20"
};

...

if(!cov_v_d934b203.data[0])cov_probe_v11(&cov_o_d934b203,0);{ // this is right after the function entry.


 do { if (DebugPrintEnabled ()) { do { if (DebugPrintLevelEnabled (0x80000000)) { DebugPrint (0x80000000,"Ming: Code coverage test start.\n"); } } while (((BOOLEAN)(0==1))); } } while (((BOOLEAN)(0==1)));

Таким образом, он сохранил некоторые объекты сборщика данных покрытия, cov_c_xxx и cov_v_xxx, в сегментах .covconst и .covbss соответственно. А во время выполнения данные журнала инструментированного кода указывают на объект cov_v_xxx.

cov_probe_v11, вызывающий при входе в функцию, просто связывает cov_c_xxx и cov_v_xxx в окончательный список ссылок результата. cov_probe_v11 является частью библиотеки среды выполнения Bullseye. Вы можете изменить его, чтобы он адаптировался к тестируемому коду.

После связывания весь другой сбор данных может происходить без необходимости вызывать cov_probe_v11.

person smwikipedia    schedule 23.04.2018