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