我正在使用armadillo c ++库来开发Rcpp包。但是我发现调试来自犰狳的任何运行时错误非常麻烦。目前,我必须在每一行之后插入打印输出以捕获出错的行。犰狳只会抛出错误:
error: subtraction: incompatible matrix dimensions: 756x1 and 26x1
并且它不会告诉任何有关行号的信息。使用gdb也不是特别有用,因为错误可能在多次迭代后发生。有没有更好的方法来获取错误发生的位置。
答案 0 :(得分:1)
我不知道Rcpp集成,但我使用gdb调试我的Armadillo代码。
请确保您在代码中始终没有捕获std::logic_error
之类的任何异常。如果然后从gdb中运行程序,它将在错误发生时中止,只需键入bt
,您就会得到一个很好的返回跟踪,告诉您应该责怪哪一行。然后,您还可以轻松检查该堆栈帧中的变量值等。
您无需单步执行代码即可充分利用调试器的优势。
如果Rcpp不允许避免捕获该异常,那么您应该始终能够为不阻塞调试器的代码编写简单的C ++测试程序。