我试图在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;
行。
答案 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
可能与您在此处看到的问题高度相关。