- 主题:请教C++多线程数组越界的调试
我用OpenMP实现了一个C++的多线程程序。
现在的版本中,跑了一段时间后会出现如下错误。
terminate called after throwing an instance of 'std::out_of_range'
what(): vector::_M_range_check: __n (which is 21) >= this->size() (which is 0)
Aborted (core dumped)
每次不一定是21,其他数字(9,25)之类的数字也出现过。
我现在头疼的是程序很大,调试起来很幸苦。是否有办法能在出现这种错误的时候告诉我是运行到哪一行的时候出错的?
比如在
A函数的第5行调用函数B,在B函数的第18行调用函数C,在C函数的第7行,出现上面的越界错误。
谢谢。
--
FROM 162.238.157.*
谢谢,刚用了这个办法。关键问题是要用
ulimit -c
看一下。我原来的数字是0,怪不得没有core。现在被我改成了unlimited. 就有了。用gdb一看就很清楚了。
原因我也找到了。用OpenMP的时候,把一个变量放在private里面,原来是为了保险,结果被初始化为0了。拿出来放在shared里面就没有问题了。
【 在 bluehearts 的大作中提到: 】
: 这不都有core了吗?gdb看一下不就好了吗?
:
: #发自zSMTH@LIO-AN00
--
FROM 162.238.157.*
谢谢,用的是Ubuntu。
【 在 DoorWay 的大作中提到: 】
: windows下,gflags.exe /p /enable your.exe /full 再跑并挂上VS调试器。挂的时候就会定在越界那一行。
: 前提是要内存够大。64位操作系统。
--
FROM 162.238.157.*
这个我以前听说过。能否介绍个详细的教程。将来好用。
谢谢。
【 在 jsznzsj 的大作中提到: 】
: 没懂。DEBUG?还是说程序无法debug。或者可以试一下valgrind(不确定是否对openmp
: 有效,没用过openmp)。
:
: ...................
--
FROM 162.238.157.*