Преброяване на грешките на valgrind, без да ги докладва

В момента поддържам пул памет. Наскоро добавих извиквания на функция valgrind към този пул, за да го направя по-полезен за откриване на грешки на valgrind, възникващи чрез използването на споменатия пул. Това, което искам да направя с това, е да напиша единичен тест, за да проверя дали извикванията ми към функциите на valgrind работят правилно. напр.

int main(void)
{
  int * test = pool_malloc(sizeof(*test)); // details not important
  *test = 3;
  pool_free(test); // details not important

  if (*test == 2)
  {
    printf("HERE");
  }

  assert(VALGRIND_COUNT_ERRORS == 1);
}

Сега този код правилно ми дава невалидна грешка при четене, докато преди не би, тъй като въпреки че паметта беше върната в пула, всъщност не беше free-d. Въпреки това, не мога да използвам този точен код, тъй като нашата рамка за единичен тест предполага, че всички грешки на valgrind означават, че тестът е неуспешен и следователно моят горен тест ще се провали. Опитах да използвам VALGRIND_DISABLE_ERROR_REPORTING, но това също изглежда деактивира не само отчитането, но и проверката за грешки - т.е. VALGRIND_COUNT_ERRORS сега връща 0. Това, което наистина искам, е нещо като VALGRIND_DISABLE_ERROR_REPORTING_BUT_KEEP_COUNTING_ERRORS_THAT_OCCUR - съществува ли нещо подобно? Има ли по-добър начин да постигна това, което искам да направя?


person R_Kapp    schedule 06.10.2019    source източник


Отговори (1)


Това, което можете да направите, е да използвате клиентската заявка на valgrind VALGRIND_COUNT_ERRORS.

valgrind.h между другото казва:

    ...
             /* Can be useful in regression testing suites -- eg. can
                 send Valgrind's output to /dev/null and still count
                 errors. */
              VG_USERREQ__COUNT_ERRORS = 0x1201,
    ...
    /* Counts the number of errors that have been recorded by a tool.  Nb:
       the tool must record the errors with VG_(maybe_record_error)() or
       VG_(unique_error)() for them to be counted. */

И така, нещо като: valgrind --log-file=/dev/null your_program ще направи Valgrind грешките докладвани на /dev/null и your_program може след това да изведе грешка, ако броят на грешките не е както се очаква.

person phd    schedule 06.10.2019