Локальная переменная lldb C не печатается

Value eval(Value arg, Table env) {
if (arg.tag == ConsCell) {
    Value operator = car(arg);
    Value operands = cdr(arg); // <- debugger stopped here

Если я напечатаю аргумент arg с p arg, я получу:

(lldb) p arg
(Value) $0 = {
  data = {
    number = 1068272
    list = 0x0000000100104cf0
    symbol = 0x0000000100104cf0 "?L\x10"
  }
  tag = ConsCell
}

Но если p operator, я получаю:

(lldb) p operator
error: expected a type
error: 1 errors parsing expression

Однако использование frame variable operator работает:

(lldb) frame variable operator
(Value) operator = {
  data = {
  number = 1068208
  list = 0x0000000100104cb0
  symbol = 0x0000000100104cb0 "\x10L\x10"
}
  tag = ConsCell
}

Что происходит, когда я использую p operator?


person stijlist    schedule 15.07.2015    source источник


Ответы (1)


lldb оценивает выражение в гибриде C++ и Objective-C. operator, имя вашей переменной, является зарезервированным ключевым словом в C++. Когда вы используете команду p (которая является псевдонимом команды expression), lldb передает ваше выражение в clang для разбора и оценки в C++/Objective-C (или, если вы отлаживаете метод Swift, анализируйте и оценивайте в Swift) . Даже если ваша программа написана на чистом C, ваши выражения оцениваются как выражения C++, а это недопустимое выражение C++.

frame variable (сокращенно fr v) не проходит через компилятор для оценки, он пытается выполнить простой анализ предоставленного пути переменной. Он может выполнять простое разыменование и отслеживание указателей, но, например, не может приводить значения.

person Jason Molenda    schedule 15.07.2015