ARM和英特尔的奇怪崩溃



讨厌的人会讨厌,但我不能为这个问题提供源代码,因为我无法分离问题,但我会尝试提供尽可能多的信息。

所以我的问题是,我的应用程序在定义明确的情况下崩溃,在我使用的C++库(OpenCASCADE)中定义良好的点。

  1. 仅当我从新线程运行代码时才会发生崩溃
  2. 线程之间没有共享数据
  3. 崩溃发生在方法调用中,在方法中的第一条指令运行之前。这是一个令人沮丧的:

    Shapr3D`GeomInt_ParFunctionOfMyGradientOfTheComputeLineBezierOfWLApprox::Perform(math_Vector const&) at AppParCurves_Function.gxx:262: 0x10b5701b0: pushq %rbp 0x10b5701b1: movq %rsp, %rbp 0x10b5701b4: subq $0x663e0, %rsp 0x10b5701bb: movq %rdi, -0x8(%rbp) 0x10b5701bf: movq %rsi, -0x10(%rbp) 0x10b5701c3: movq -0x8(%rbp), %rsi 0x10b5701c7: movq %rsi, %rdi 0x10b5701ca: addq $0xc0, %rdi 0x10b5701d1: movq -0x10(%rbp), %rax 0x10b5701d5: movq %rsi, -0x65ba0(%rbp) //Crashes here 0x10b5701dc: movq %rax, %rsi 0x10b5701df: callq 0x10c050d76 ; symbol stub for: math_Vector::operator=(math_Vector const&) 0x10b5701e4: movq -0x65ba0(%rbp), %rsi 0x10b5701eb: addq $0x8828, %rsi 0x10b5701f2: movq -0x65ba0(%rbp), %rdi 0x10b5701f9: addq $0xc0, %rdi 0x10b570200: movq %rdi, -0x65ba8(%rbp) 0x10b570207: movq %rsi, %rdi 0x10b57020a: movq -0x65ba8(%rbp), %rsi 0x10b570211: movq %rax, -0x65bb0(%rbp)

  4. 它因访问错误而崩溃:EXC_BAD_ACCESS(代码 = 1,地址 = 0x9f1606100)

  5. 调用方法的对象是动态分配还是静态分配并不重要
  6. 我以反汇编方式提供了英特尔,但崩溃发生在 Mac OS 和 iOS 上,32 位和 64 位
  7. 瓦尔格林德没有透露任何问题
  8. 另外,这里有一个调用堆栈(这可能不是很有用,除非你熟悉OpenCASCADE)

0 0x000000010b5701d5 in GeomInt_ParFunctionOfMyGradientOfTheComputeLineBezierOfWLApprox::Perform(math_Vector const&) at /Users/icsanady/occt_git/occt/adm/mac/xcd/../../../inc/AppParCurves_Function.gxx:265 1 0x000000010b574dac in GeomInt_ParFunctionOfMyGradientOfTheComputeLineBezierOfWLApprox::Values(math_Vector const&, double&, math_Vector&) at /Users/icsanady/occt_git/occt/adm/mac/xcd/../../../inc/AppParCurves_Function.gxx:589 2 0x000000010b790286 in math_BFGS::Perform(math_MultipleVarFunctionWithGradient&, math_Vector const&) at /Users/icsanady/occt_git/occt/src/math/math_BFGS.cxx:187 3 0x000000010b56934c in GeomInt_Gradient_BFGSOfMyGradientOfTheComputeLineBezierOfWLApprox::GeomInt_Gradient_BFGSOfMyGradientOfTheComputeLineBezierOfWLApprox(math_MultipleVarFunctionWithGradient&, math_Vector const&, double, double, double, int) at /Users/icsanady/occt_git/occt/adm/mac/xcd/../../../inc/AppParCurves_Gradient_BFGS.gxx:31 4 0x000000010b5693c9 in GeomInt_Gradient_BFGSOfMyGradientOfTheComputeLineBezierOfWLApprox::GeomInt_Gradient_BFGSOfMyGradientOfTheComputeLineBezierOfWLApprox(math_MultipleVarFunctionWithGradient&, math_Vector const&, double, double, double, int) at /Users/icsanady/occt_git/occt/adm/mac/xcd/../../../inc/AppParCurves_Gradient_BFGS.gxx:32 5 0x000000010b56c80d in GeomInt_MyGradientOfTheComputeLineBezierOfWLApprox::GeomInt_MyGradientOfTheComputeLineBezierOfWLApprox(GeomInt_TheMultiLineOfWLApprox const&, int, int, Handle_AppParCurves_HArray1OfConstraintCouple const&, math_Vector&, int, double, double, int) at /Users/icsanady/occt_git/occt/adm/mac/xcd/../../../inc/AppParCurves_Gradient.gxx:186 6 0x000000010b56cd4a in GeomInt_MyGradientOfTheComputeLineBezierOfWLApprox::GeomInt_MyGradientOfTheComputeLineBezierOfWLApprox(GeomInt_TheMultiLineOfWLApprox const&, int, int, Handle_AppParCurves_HArray1OfConstraintCouple const&, math_Vector&, int, double, double, int) at /Users/icsanady/occt_git/occt/adm/mac/xcd/../../../inc/AppParCurves_Gradient.gxx:209 7 0x000000010b5a67c9 in GeomInt_TheComputeLineBezierOfWLApprox::Compute(GeomInt_TheMultiLineOfWLApprox const&, int, int, math_Vector&, double&, double&) at /Users/icsanady/occt_git/occt/adm/mac/xcd/../../../inc/Approx_ComputeLine.gxx:920 8 0x000000010b5a5704 in GeomInt_TheComputeLineBezierOfWLApprox::Perform(GeomInt_TheMultiLineOfWLApprox const&) at /Users/icsanady/occt_git/occt/adm/mac/xcd/../../../inc/Approx_ComputeLine.gxx:779 9 0x000000010b5c4f79 in GeomInt_WLApprox::Perform(IntSurf_Quadric const&, Handle_Adaptor3d_HSurface const&, Handle_IntPatch_WLine const&, unsigned int, unsigned int, unsigned int, int, int) at /Users/icsanady/occt_git/occt/adm/mac/xcd/../../../inc/ApproxInt_Approx.gxx:1058 10 0x000000010b5c359f in GeomInt_WLApprox::Perform(Handle_Adaptor3d_HSurface const&, Handle_Adaptor3d_HSurface const&, Handle_IntPatch_WLine const&, unsigned int, unsigned int, unsigned int, int, int) at /Users/icsanady/occt_git/occt/adm/mac/xcd/../../../inc/ApproxInt_Approx.gxx:637 11 0x000000010bd61455 in IntTools_FaceFace::MakeCurve(int, Handle_Adaptor3d_TopolTool const&, Handle_Adaptor3d_TopolTool const&) at /Users/icsanady/occt_git/occt/src/IntTools/IntTools_FaceFace.cxx:1839 12 0x000000010bd58cae in IntTools_FaceFace::Perform(TopoDS_Face const&, TopoDS_Face const&) at /Users/icsanady/occt_git/occt/src/IntTools/IntTools_FaceFace.cxx:749 13 0x000000010bccb172 in BOPAlgo_FaceFace::Perform() at /Users/icsanady/occt_git/occt/src/BOPAlgo/BOPAlgo_PaveFiller_6.cxx:156 14 0x000000010bccab56 in BOPCol_Functor >::operator()(int) const at /Users/icsanady/occt_git/occt/adm/mac/xcd/../../../inc/BOPCol_Parallel.hxx:45 15 0x000000010bcca8f2 in void OSD_Parallel::For > >(int, int, BOPCol_Functor > const&, unsigned int) at /Users/icsanady/occt_git/occt/adm/mac/xcd/../../../inc/OSD_Parallel.hxx:262 16 0x000000010bcc4d2b in BOPCol_Cnt >, BOPCol_NCVector >::Perform(unsigned int, BOPCol_NCVector&) at /Users/icsanady/occt_git/occt/adm/mac/xcd/../../../inc/BOPCol_Parallel.hxx:68 17 0x000000010bcb9cef in BOPAlgo_PaveFiller::PerformFF() at /Users/icsanady/occt_git/occt/src/BOPAlgo/BOPAlgo_PaveFiller_6.cxx:270 18 0x000000010bca41c3 in BOPAlgo_PaveFiller::PerformInternal() at /Users/icsanady/occt_git/occt/src/BOPAlgo/BOPAlgo_PaveFiller.cxx:303 19 0x000000010bca3d6d in BOPAlgo_PaveFiller::Perform() at /Users/icsanady/occt_git/occt/src/BOPAlgo/BOPAlgo_PaveFiller.cxx:203

我知道没有来源真的很难提供帮助,但目前这是我能提供的最好的,我真的很卡住。我希望至少有人能给我一些提示。我将尽力提供任何必要的信息。

该方法使用

以下命令在堆栈上进行大量分配:

0x10b5701b4:  subq   $0x663e0, %rsp

并且您的应用程序在存储到堆栈时崩溃:

0x10b5701d5:  movq   %rsi, -0x65ba0(%rbp)   //Crashes here

(它使用 RBP 作为帧指针)

因此,我怀疑堆栈溢出。尝试增加此线程的堆栈大小。请注意,0x663e0是418784字节,这确实是一个异常大量的堆栈。

相关内容

  • 没有找到相关文章

最新更新