Использовать С++ std:: cout в lldb

Я пытаюсь вызвать std::cout внутри lldb в проекте Xcode 5 С++. Мой проект имеет строку #include <iostream> (и я проверил, что скомпилированные команды std::cout работают нормально), но у нее нет строки using namespace std;.

Когда я останавливаюсь в точке останова в lldb, я не могу позвонить std::cout:

(lldb) expr std::cout << "test"
error: no member named 'cout' in namespace 'std'
error: 1 errors parsing expression

(lldb) expr cout << "test"
error: use of undeclared identifier 'cout'
error: 1 errors parsing expression

Для тех, кто заинтересован, я пытаюсь использовать std::cout для печати объекта OpenCV Mat. Но эта деталь, вероятно, не важна.

Моя версия lldb lldb-300.2.53.

По запросу здесь (тривиальный) код:

#include <iostream>
int main(int argc, const char * argv[])
{
  std::cout << "Hello World" << std::endl;
  return 0;
}

Точка останова находится в строке return 0;.

Ответ 1

возможно, вы можете сделать это по-другому:

1, создайте dylib, импортируйте все необходимые заголовки, напишите такую ​​функцию:

void mylog(const MyObject& obj)
{ 
   //assume MyObject is the type you want to view in Debuger
   std::cout << obj << std::endl;
}

создайте как libdbghelper.dylib на вашем рабочем столе (или другой короткий путь).

2, загрузите его в проект отладки:

(lldb) target modules add /Users/yourName/Desktop/libdbghelper.dylib

3, вы можете выполнить его запись с помощью команды

(lldb)expr mylog((const MyObject&)myobj);

вот результат выполнения моего mac: http://i.stack.imgur.com/LBBLJ.jpg

код dylib вот так: http://i.stack.imgur.com/H1Q9v.jpg

Ответ 2

вы не можете использовать std:: cout в командной строке, поскольку вы не можете WATCH его в ANY Debuger, но вы можете объявить ссылку на него следующим образом:

std::ostream& os = std::cout;

чтобы вы могли выполнить команду expr os << "ok" в lldb.

вот результат выполнения моего mac:

http://i.stack.imgur.com/lHvfa.jpg

надеюсь, что это будет полезно