打印以找到错误代码块

时间:2015-02-26 19:28:21

标签: c++ rstudio rcpp

伟大的C ++程序员,

我多次遇到这种情况,但我仍然不知道如何解决它。

我在Rstudio中用C ++编程,我的程序遇到致命错误,需要我重新启动。我想找到我的代码中的错误所在。我经常做的是添加一些检测线,如:

int main()
{
    ...code block;

    std::cout<<"1.1\n";

    ...code block;

    std::cout<<"1.2\n";

    ...code block;

    std::cout<<"1.3\n";

    ...code block;

    std::cout<<"1.4\n";

    return 1;
}

然后我运行代码。

奇怪的是,在它遇到“致命错误”之前,有时我在控制台上打印“1.1”,有时我得到“1.1”和“1.2”,有时我得到“1.1”,“1.2”和“1.3,有时我一无所获。

我想它与操作系统有关,因为它是操作系统获得打印需要一些时间的命令,但同时CPU正在执行代码并遇到致命错误。

或者,编译代码的方式可能会导致这样的事情发生?

无论如何要解决它?我只是希望程序在遇到“致命错误”之前打印出我要求的所有内容。

谢谢!

编译器优化可能会重新排序代码,使打印输出不可靠。您在R环境中编写C ++编程,默认的g ++编译器优化设置为-O2。转到R目录,搜索名为“Makeconf”的文件。使用文本编辑器打开它,找到命令“CXX11FLAGS = -O2 ...”,擦除“-O2”,保存文件并重建程序。其他命令如“CXXFLAGS = -O2 ...”也可能需要修改。到那时,代码将严格按顺序运行。

1 个答案:

答案 0 :(得分:2)

您使用的是std::cout R使用的内容,您会遇到两种不同的缓冲方案。

简易解决方案:使用Rcpp::Rcout代替重定向到R的输出流。