условная контрольная точка отслеживает содержимое указателя в lldb

#c #lldb

#c #lldb

Вопрос:

Я хотел бы остановить свое выполнение, когда содержимое вспомогательного указателя на struct равно «AAAAA».

 typedef struct Matriz {
  string *usuario;
  string *produto;
  string nota;
  Matriz *proxima_linha, *proxima_coluna;
} Matriz;

Matriz *aux = new Matriz();
  

сначала я ставлю точку останова после объявления aux.

breakpoint set --file UsuariosSemelhantes.cpp --line 55

затем я определяю контрольную точку.

watchpoint set variable aux

а затем я добавляю условие остановки.

watchpoint modify -c '(int)strcmp(*aux->usuario,"AAAAA") == 0'

но я получаю следующую ошибку:

 Process 398158 resuming
Stopped due to an error evaluating condition of watchpoint Watchpoint 1: addr = 0x7fffffffe620 size = 8 state = enabled type = w: "(int)strcmp(*aux->usuario,"AAAAA") == 0"
error: <user expression 0>:1:13: cannot pass object of non-trivial type 'std::string' (aka 'std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >') through variadic function; call will abort at runtime
(int)strcmp(*aux->usuario,"AAAAA") == 0
            ^
  

Ответ №1:

Условия должны быть допустимыми выражениями C . Вы не можете передать std::string в strcmp, вам нужно передать символ *. Если вы попытаетесь сделать это в коде, вы также получите ошибку.

Поскольку у вас есть std::string , вероятно, проще всего просто использовать метод std::string, например:

 aux->usuario->compare("AAAAA") == 0