#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