繁体   English   中英

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

[英]Use C++ std::cout in 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; 线。

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

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

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

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

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

希望它有所帮助

也许你可以用另一种方式做到:

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/H1Q9​​v.jpg

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

在c ++ lldb中使用重载运算符计算表达式

可能与你在这里看到的问题高度相关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM