Как использовать `-fsanitize-покрытие = trace-p c -guard` в быстром проекте? - PullRequest
1 голос
/ 12 апреля 2020

В проекте с языком Objective- C я добавляю -fsanitize-coverage=trace-pc-guard в Другое C Флаги :

enter image description here

Затем я добавляю в проект два метода, как показано ниже:

void __sanitizer_cov_trace_pc_guard_init(uint32_t *start, uint32_t *stop) {
  static uint64_t N;  // Counter for the guards.
  if (start == stop || *start) return;  // Initialize only once.
  printf("INIT: %p %p\n", start, stop);
  for (uint32_t *x = start; x < stop; x++)
    *x = ++N;  // Guards should start from 1.
}

void __sanitizer_cov_trace_pc_guard(uint32_t *guard) {
  if (!*guard) return;
  void *PC = __builtin_return_address(0);
  char PcDescr[1024];
  printf("guard: %p %x PC %s\n", guard, *guard, PcDescr);
}

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

enter image description here

В swift проекте я также установил Other C Flags. И добавьте -sanitize-coverage=func-sanitize=undefined в Other Swift Flags enter image description here

, но я получил ошибку:

Undefined symbol: ___sanitizer_cov_trace_pc_guard_init

enter image description here

Как мне решить эту проблему и получить такую ​​информацию, как oc project.

1 Ответ

0 голосов
/ 13 апреля 2020

Просто предположение: я не думаю, что «Другие быстрые флаги» передаются вызову компоновщика - это объясняет ошибку неопределенных символов. Попробуйте добавить «-fsanitize = undefined» в флаги компоновщика.

Еще одно предположение: если вы передадите «-fsanitize = undefined» в флаги компоновщика для своего проекта Obj C, вы, вероятно, не захотите необходимо предоставить свои собственные определения для __sanitizer_cov _ *.

...