在lldb中使用C ++ std :: cout

时间:2013-12-06 17:44:46

标签: c++ xcode5 lldb

我试图在Xcode 5 C ++项目中调用lldb中的std::cout。我的项目有一个#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;行。

3 个答案:

答案 0 :(得分:2)

你不能在命令行中使用std :: cout,因为WATCH Debuger中你不能ANY,但你可以这样声明对它的引用:

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

这样你就可以在lldb中执行命令expr os << "ok"

这是我的mac中的运行结果:

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

希望它有用

答案 1 :(得分:2)

也许你可以通过另一种方式来做到这一点:

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 :(得分:0)

我不是肯定这是一个重复,但我相信Jim Ingham的回答

Evaluating an expression with overloaded operators in c++ lldb

可能与您在此处看到的问题高度相关。