使用C++;lldb中的std::cout 我试图在XLDC++C++项目中调用LLD:B中的代码> STD::CUT。我的项目有一个#include行(我验证了编译的std::cout命令工作正常),但它没有使用名称空间std的行

使用C++;lldb中的std::cout 我试图在XLDC++C++项目中调用LLD:B中的代码> STD::CUT。我的项目有一个#include行(我验证了编译的std::cout命令工作正常),但它没有使用名称空间std的行,c++,xcode5,lldb,C++,Xcode5,Lldb,当我在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 par

当我在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

断点位于
返回0处行。

您不能在命令行中使用std::cout,因为您不能在
任何
调试程序中查看它,但您可以这样声明对它的引用:

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

因此,您可以执行命令
expr os,或者您可以通过另一种方式执行:

1、创建动态库,导入所需的所有标题,编写如下函数:

std::ostream& os = std::cout;
void mylog(const MyObject& obj)
{ 
   //assume MyObject is the type you want to view in Debuger
   std::cout << obj << std::endl;
}
3,然后您可以使用命令记录它

(lldb)expr mylog((const MyObject&)myobj);
以下是我的mac中的运行结果:

动态库的代码如下:
我不能肯定这是一个dup,但我相信吉姆·英厄姆在年给出的答案


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

您能发布代码吗?
expr std::cout@DieterLücking,如果“实际代码”是指我的lldb命令,我尝试了
std::cout
cout
。我在其中测试lldb命令的项目代码与我在OP中编写的代码完全相同,没有使用名称空间std的
行。@DieterLücking,不,您可以看到
#include
行显式地出现在我的代码示例中。我还确认了
std::cout
命令在编译的代码中有效,而不是在lldb调试器中。那么expr std::cout.operator如何?它似乎打印
os
的结构,但实际上并不打印字符串(在您的示例中为“ok”)。另外,在调试共享库(我在OP中没有提到)时,这将不起作用,因为修改代码以添加
std::ostream&os=std::cout行。我更喜欢只使用调试器的解决方案。这是可行的,只是我用
std::cout
包装器构建了一个单独的Xcode项目,然后使用中的步骤将其包含在当前的Xcode项目中。使用
mylog
函数时,我不必包含标题;只有图书馆。现在我要做的就是找出如何计算,以便检查向量元素。没错,每个问题的根本原因可能是相同的(标准库中的内联模板函数)。您引用的另一篇stack exchange文章也是我的,这绝非巧合!