【问题标题】:How to get std::cout to show in eclipse IDE console when using boost.test?使用 boost.test 时如何让 std::cout 在 Eclipse IDE 控制台中显示?
【发布时间】:2014-10-29 20:36:31
【问题描述】:

正如问题所说,当使用带有 boost.test 的“c/c++ 单元”运行配置时,我无法在 Eclipse 控制台中看到 std::out 语句。

这是一个描述问题的简单示例。

quickEclipse_stdout.cpp:

#include <iostream>
int main(int argc, char* argv[])
{
    std::cout << "I see this in the eclipse console!\n";
    std::cout << "I also see this in the terminal!\n";
    return(0);
}

quickEclipse_stdout_test.cpp:

#include <iostream>
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_SUITE(quickTest_stdout)

BOOST_AUTO_TEST_CASE(bla)
{
   std::cout << "I cannot see this in the eclipse console" << std::endl;
   std::cout << "but I can see it when run outside eclipse in terminal" << std::endl;

    BOOST_CHECK_MESSAGE(true, "of course I see this in eclipse c/c++ test log");
}

BOOST_AUTO_TEST_SUITE_END()

我用cmake为eclipse生成项目文件。

CMakeLists.txt:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
PROJECT(quickTest CXX)

FIND_PACKAGE(Boost COMPONENTS program_options filesystem regex unit_test_framework)
IF (Boost_FOUND)
    MESSAGE("Boost found!!!")
    INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
    LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
    ADD_DEFINITIONS( "-DHAS_BOOST" )
ENDIF()

#main output to console works
ADD_EXECUTABLE(quickEclipse_stdout, quickEclipse_stdout.cpp)

#boost.test output to console doesnt work
ADD_EXECUTABLE(quickEclipse_stdout_test UTDriver.cpp quickEclipse_stdout_test.cpp) 
TARGET_LINK_LIBRARIES(quickEclipse_stdout_test ${Boost_LIBRARIES})

UTDriver.cpp:

#define BOOST_TEST_MODULE myQuickEclipseUT
#define BOOST_TEST_MAIN
#define BOOST_TEST_DYN_LINK
#include <boost/test/unit_test.hpp>

要生成 eclipse 项目,我运行以下命令:

cmake -G"Eclipse CDT4 - Unix Makefiles" -DCMAKE_ECLIPSE_VERSION=4.3 -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER_ARG1=-std=c++11 ~/mySrcDir
  1. 我在eclipse中打开项目,进入c++透视图
  2. 然后我通过双击 make 目标(quickEclipse_stdout、quickEclipse_stdout_test)来构建可执行文件
  3. 我开始运行配置并为 quickEclipse_stdout 创建“c/c++ 应用程序”。
  4. 我转到运行配置并为 quickEclipse-stdout_test 创建“c/c++ 单元”并选择 boost 作为测试运行器。
  5. 我运行 quickEclipse_stdout 并在 Eclipse 控制台中查看输出。
  6. 我运行 quickEclipse_stdout_test 并且 Eclipse 控制台是空的。我在 c/c++ 单元消息选项卡中看到了该消息。
  7. 如果我在 Eclipse 之外的终端中运行可执行文件,我可以在两者上看到 std::out。

在运行 quickEclipse_stdout_test 时,如何让 std::out 在 Eclipse 控制台中显示?

我在 Linux CentOS 6.5 上。

Eclipse 标准/SDK 版本:开普勒服务版本 1 内部版本号:20130919-0819

Eclipse C/C++ 开发工具 版本:8.2.1.201309180223

【问题讨论】:

标签: c++ eclipse boost cmake cout


【解决方案1】:

我正是你的情况,我认为它是 Eclipse 中 C/C++ 单元测试插件的一个缺失特性。

插件需要 xml 格式的整个测试输出 (--output_format=XML),它将标准输出消息放在 xml 输出的节点中。插件将直接解析输出,并将信息组织在相应的视图中。该插件错过了显示标准输出消息的选项。我可以简单地在错误、警告、信息旁边添加一个图标来显示标准输出消息。

我在 github 上为此打开了一个问题:https://github.com/xgsa/cdt-tests-runner/issues/14 但该项目在过去几年没有积极维护......

【讨论】:

  • 我很确定这是一个答案。答案并不总是解决方案,但它描述了技术细节以及解决方案的外观(+为获得此解决方案所做的工作)。此外,我没有其他问题,我只是描述了问题的技术背景以及所需的输出格式 XML 导致了问题。
【解决方案2】:

我确定根据您的描述,它会将标准输出重定向到自己的窗口以进行测试

【讨论】:

  • 如何将它定向到 Eclipse 控制台?我更改了问题的标题,因为我对在控制台中获取输出更感兴趣。
  • 你试过用 BOOST_TEST_MESSAGE 代替 std::cout 吗?
  • 我不想用 BOOST_TEST_MESSAGE 替换 std::cout 调用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
相关资源
最近更新 更多