什么会导致像这样的“翻倍”堆栈?

一个用户报告了一个使用我们的SDK内置的ODBC驱动程序崩溃的情况,并提供了两个核心转储。我将在下面提供堆栈跟踪:

第一次崩溃:

    RDFODBC_sb64.dll!_wassert(const wchar_t * expr,const wchar_t * filename,unsigned int lineno) Line 369 C
    RDFODBC_sb64.dll!Simba::ODBC::ODBCTaskContainer::SetTask(Simba::ODBC::IODBCTask * in_taskPointer) Line 61   C++
    RDFODBC_sb64.dll!Simba::ODBC::Statement::~Statement() Line 413  C++
    RDFODBC_sb64.dll!Simba::ODBC::Statement::`scalar deleting destructor'(unsigned int) C++
    RDFODBC_sb64.dll!`anonymous namespace'::DeleteAndRemove<std::vector<Simba::ODBC::Statement * __ptr64,std::allocator<Simba::ODBC::Statement * __ptr64> > >(std::vector<Simba::ODBC::Statement *,std::allocator<Simba::ODBC::Statement *> > & in_vector,std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Simba::ODBC::Statement *> > > in_toDeleteAndRemove) Line 429   C++
    RDFODBC_sb64.dll!Simba::ODBC::Connection::DeleteStatement(Simba::ODBC::Statement * in_statement) Line 846   C++
    RDFODBC_sb64.dll!Simba::ODBC::ConnectionState::SQLFreeHandle(Simba::ODBC::Connection * in_connection,short HandleType,void * Handle) Line 179 C++
    RDFODBC_sb64.dll!Simba::ODBC::Connection::SQLFreeHandle(short HandleType,void * Handle) Line 1592  C++
    RDFODBC_sb64.dll!SQLFreeHandle::__l346::<lambda>() Line 1931    C++
    RDFODBC_sb64.dll!std::_Callable_obj<short <lambda>(void),0>::_ApplyX<short>() Line 284  C++
    RDFODBC_sb64.dll!std::_Func_impl<std::_Callable_obj<short <lambda>(void),0>,std::allocator<std::_Func_class<short> >,short>::_Do_call() Line 229    C++
    RDFODBC_sb64.dll!std::_Func_class<short>::operator()() Line 316 C++
    RDFODBC_sb64.dll!_default_sen_odbc_api_function_wrapper_(std::function<short __cdecl(void)> & apiFunction) Line 773 C++
    RDFODBC_sb64.dll!SQLFreeHandle(short HandleType,void * Handle) Line 2014   C++
    MPAPlugin.dll!SQLFreeHandle(short HandleType,void * Handle) Line 1786  C++
    odbc32.dll!FreeStmt()  Unknown
    odbc32.dll!SQLFreeHandle()  Unknown
    sasodb.dll!00000000064d7187()   Unknown
    sasodb.dll!00000000064c1b26()   Unknown
    sasioodb.dll!000000000638d6a6() Unknown
    sasxdbi.dll!0000000006456fe3()  Unknown
    sasxdbi.dll!0000000006417fdf()  Unknown
    sasyh.dll!00000000053cec60()    Unknown
    sasyh.dll!00000000053c157a()    Unknown
    sasxkern.dll!0000000005155a2c() Unknown
    sashost.dll!000000000383e9b2()  Unknown
    sashost.dll!000000000383b877()  Unknown
    sashost.dll!000000000383b375()  Unknown
    sashost.dll!000000000383d962()  Unknown
    sashost.dll!000000000384081f()  Unknown
    sashost.dll!000000000383c4e3()  Unknown
    sashost.dll!00000000038322c4()  Unknown
    sashost.dll!000000000384628f()  Unknown
    sashost.dll!0000000003849d10()  Unknown
    sashost.dll!000000000383d509()  Unknown
    sashost.dll!00000000038506f0()  Unknown
    sashost.dll!000000000384f649()  Unknown
    0000000004846610()  Unknown
    fe48daea1d7f4cf6()  Unknown
    cccccccccccccccc()  Unknown
    000000000d3683d0()  Unknown
>   RDFODBC_sb64.dll!Simba::Support::AutoPtr<sbicu_58::GregorianCalendar,Simba::Support::AutoPtr_DefaultDeallocator<sbicu_58::GregorianCalendar> >::operator->() Line 142   C++
    RDFODBC_sb64.dll!`anonymous namespace'::CreateEmptyCalendar(Simba::Support::ILogger * in_logger) Line 118   C++
    RDFODBC_sb64.dll!Simba::Support::TimestampTzConverter::TimestampTzConverter(const Simba::Support::simba_wstring & in_format,Simba::Support::ILogger * in_logger) Line 395  C++
    RDFODBC_sb64.dll!Simba::RestSQL::RSAbstractTable::RSAbstractTable(Simba::Support::ILogger * in_log,Simba::RestSQL::Settings & in_settings,Simba::RestSQL::RSConnection & in_connection,Simba::RestSQL::RestAPI & in_api,const Simba::RestSQL::_TableInfo & in_tableInfo,Simba::Support::IWarningListener * in_errorsListener,Simba::DriverSupport::HandlePool<void *,Simba::WebServiceSupport::CurlHandleManager,std::vector<void *,std::allocator<void *> > > & in_curlPool,Simba::RestSQL::MPAWrapper & in_mpa,Simba::Support::AutoPtr<Simba::RestSQL::EndpointParameterInfo,Simba::Support::AutoPtr_DefaultDeallocator<Simba::RestSQL::EndpointParameterInfo> > in_executionEndpoint) Line 538   C++
    RDFODBC_sb64.dll!Simba::RestSQL::RSTableT<Simba::RestSQL::RSJsonTable>::RSTableT<Simba::RestSQL::RSJsonTable>(Simba::Support::ILogger * in_log,Simba::Support::AutoPtr_DefaultDeallocator<Simba::RestSQL::EndpointParameterInfo> > in_executionEndpoint) Line 807   C++
    RDFODBC_sb64.dll!Simba::RestSQL::RSJsonTable::RSJsonTable(Simba::Support::ILogger * in_log,Simba::Support::AutoPtr_DefaultDeallocator<Simba::RestSQL::EndpointParameterInfo> > in_executionEndpoint) Line 54    C++
    RDFODBC_sb64.dll!Simba::RestSQL::RSTableFactory::CreateRSTable(Simba::Support::ILogger * in_log,Simba::RestSQL::RSConnection * in_connection,Simba::Support::AutoPtr_DefaultDeallocator<Simba::RestSQL::EndpointParameterInfo> > in_executionEndpoint) Line 72   C++
    RDFODBC_sb64.dll!Simba::RestSQL::RSDataEngine::OpenTable(const Simba::Support::simba_wstring & in_catalogName,const Simba::Support::simba_wstring & in_schemaName,const Simba::Support::simba_wstring & in_tableName,Simba::SQLEngine::DSIExtTableOpenType in_openType) Line 200 C++
    RDFODBC_sb64.dll!Simba::ViewSupport::ViewManagedDataEngine<Simba::RestSQL::RSDataEngine>::OpenTable(const Simba::Support::simba_wstring & in_catalogName,Simba::SQLEngine::DSIExtTableOpenType in_openType) Line 276  C++
    RDFODBC_sb64.dll!Simba::SQLEngine::AetableNameBuilder::VisitNonTerminalParseNode(Simba::SQLEngine::PsnonTerminalParseNode * in_node) Line 70    C++
    RDFODBC_sb64.dll!Simba::SQLEngine::PsnonTerminalParseNode::acceptVisitor(Simba::SQLEngine::IParseTreeVisitor & in_visitor) Line 486 C++
    RDFODBC_sb64.dll!Simba::SQLEngine::AEBuilderBaseT<Simba::SQLEngine::AERelationalExpr,Simba::Support::AutoPtr<Simba::SQLEngine::AERelationalExpr,Simba::Support::AutoPtr_DefaultDeallocator<Simba::SQLEngine::AERelationalExpr> > >::Build(Simba::SQLEngine::PSParseNode * in_node) Line 70  C++
    RDFODBC_sb64.dll!Simba::SQLEngine::AetableRefBuilder::VisitNonTerminalParseNode(Simba::SQLEngine::PsnonTerminalParseNode * in_node) Line 77 C++
    RDFODBC_sb64.dll!Simba::SQLEngine::PsnonTerminalParseNode::acceptVisitor(Simba::SQLEngine::IParseTreeVisitor & in_visitor) Line 486 C++
    RDFODBC_sb64.dll!Simba::SQLEngine::AEBuilderBaseT<Simba::SQLEngine::AERelationalExpr,Simba::Support::AutoPtr_DefaultDeallocator<Simba::SQLEngine::AERelationalExpr> > >::Build(Simba::SQLEngine::PSParseNode * in_node) Line 70  C++
    RDFODBC_sb64.dll!Simba::SQLEngine::AetableRefListBuilder::VisitNonTerminalParseNode(Simba::SQLEngine::PsnonTerminalParseNode * in_node) Line 48 C++
    RDFODBC_sb64.dll!Simba::SQLEngine::PsnonTerminalParseNode::acceptVisitor(Simba::SQLEngine::IParseTreeVisitor & in_visitor) Line 486 C++
    RDFODBC_sb64.dll!Simba::SQLEngine::AEBuilderBaseT<Simba::SQLEngine::AERelationalExpr,Simba::Support::AutoPtr_DefaultDeallocator<Simba::SQLEngine::AERelationalExpr> > >::Build(Simba::SQLEngine::PSParseNode * in_node) Line 70  C++
    RDFODBC_sb64.dll!Simba::SQLEngine::AEQuerySpecBuilder::VisitNonTerminalParseNode(Simba::SQLEngine::PsnonTerminalParseNode * in_node) Line 85    C++
    RDFODBC_sb64.dll!Simba::SQLEngine::PsnonTerminalParseNode::acceptVisitor(Simba::SQLEngine::IParseTreeVisitor & in_visitor) Line 486 C++
    RDFODBC_sb64.dll!Simba::SQLEngine::AEBuilderBaseT<Simba::SQLEngine::AERelationalExpr,Simba::Support::AutoPtr_DefaultDeallocator<Simba::SQLEngine::AERelationalExpr> > >::Build(Simba::SQLEngine::PSParseNode * in_node) Line 70  C++
    RDFODBC_sb64.dll!Simba::SQLEngine::AERelationalExprBuilder::BuildSelectStatement(Simba::SQLEngine::PsnonTerminalParseNode * in_node) Line 132   C++
    RDFODBC_sb64.dll!Simba::SQLEngine::AERelationalExprBuilder::VisitNonTerminalParseNode(Simba::SQLEngine::PsnonTerminalParseNode * in_node) Line 65   C++
    RDFODBC_sb64.dll!Simba::SQLEngine::PsnonTerminalParseNode::acceptVisitor(Simba::SQLEngine::IParseTreeVisitor & in_visitor) Line 486 C++
    RDFODBC_sb64.dll!Simba::SQLEngine::AEBuilderBaseT<Simba::SQLEngine::AERelationalExpr,Simba::Support::AutoPtr_DefaultDeallocator<Simba::SQLEngine::AERelationalExpr> > >::Build(Simba::SQLEngine::PSParseNode * in_node) Line 70  C++
    RDFODBC_sb64.dll!Simba::SQLEngine::AEQueryBuilder::VisitNonTerminalParseNode(Simba::SQLEngine::PsnonTerminalParseNode * in_node) Line 66    C++
    RDFODBC_sb64.dll!Simba::SQLEngine::PsnonTerminalParseNode::acceptVisitor(Simba::SQLEngine::IParseTreeVisitor & in_visitor) Line 486 C++
    RDFODBC_sb64.dll!Simba::SQLEngine::AEBuilderBaseT<Simba::SQLEngine::AEStatement,Simba::Support::AutoPtr<Simba::SQLEngine::AEStatement,Simba::Support::AutoPtr_DefaultDeallocator<Simba::SQLEngine::AEStatement> > >::Build(Simba::SQLEngine::PSParseNode * in_node) Line 70 C++
    RDFODBC_sb64.dll!Simba::SQLEngine::AEStatementBuilder::BuildQuery(Simba::SQLEngine::PsnonTerminalParseNode * in_node) Line 146  C++
    RDFODBC_sb64.dll!Simba::SQLEngine::AEStatementBuilder::VisitNonTerminalParseNode(Simba::SQLEngine::PsnonTerminalParseNode * in_node) Line 60    C++
    RDFODBC_sb64.dll!Simba::SQLEngine::PsnonTerminalParseNode::acceptVisitor(Simba::SQLEngine::IParseTreeVisitor & in_visitor) Line 486 C++
    RDFODBC_sb64.dll!Simba::SQLEngine::AEBuilderBaseT<Simba::SQLEngine::AEStatement,Simba::Support::AutoPtr_DefaultDeallocator<Simba::SQLEngine::AEStatement> > >::Build(Simba::SQLEngine::PSParseNode * in_node) Line 70 C++
    RDFODBC_sb64.dll!Simba::SQLEngine::AEAetBuilder::Build(Simba::SQLEngine::PSParseNode * in_node,Simba::SQLEngine::DSIExtSqlDataEngine * in_dataEngine) Line 22  C++
    RDFODBC_sb64.dll!Simba::SQLEngine::DSIExtSqlDataEngine::Prepare(const Simba::Support::simba_wstring & in_sqlStatement) Line 170 C++
    RDFODBC_sb64.dll!Simba::ODBC::StatementState::InternalPrepare(wchar_t * in_sqlText,int in_textLength,bool in_isDirectExecute) Line 1492   C++
    RDFODBC_sb64.dll!Simba::ODBC::StatementState::DoPrepare(wchar_t * in_sqlText,bool in_isDirectExecute) Line 877  C++
    RDFODBC_sb64.dll!Simba::ODBC::StatementState::SQLPrepareW(wchar_t * StatementText,long TextLength) Line 742    C++
    RDFODBC_sb64.dll!Simba::ODBC::StatementState1::SQLPrepareW(wchar_t * StatementText,long TextLength) Line 43    C++
    RDFODBC_sb64.dll!Simba::ODBC::Statement::SQLPrepareW(wchar_t * StatementText,long TextLength) Line 1253    C++
    RDFODBC_sb64.dll!Simba::ODBC::SQLPreparetask<1>::DoSynchronously(Simba::ODBC::Statement & in_stmt,const Simba::ODBC::SQLPreparetask<1>::TaskParameters & in_params) Line 211   C++
    RDFODBC_sb64.dll!DoTask<Simba::ODBC::SQLPreparetask<1> >(const char * in_functionName,void * in_handle,Simba::ODBC::SQLPreparetask<1>::TaskParameters & in_parameters) Line 685   C++
    RDFODBC_sb64.dll!SQLPrepareW::__l3::<lambda>() Line 4061    C++
    RDFODBC_sb64.dll!std::_Callable_obj<short <lambda>(void),short>::_Do_call() Line 229    C++
    RDFODBC_sb64.dll!std::_Func_class<short>::operator()() Line 316 C++
    RDFODBC_sb64.dll!_default_sen_odbc_api_function_wrapper_(std::function<short __cdecl(void)> & apiFunction) Line 773 C++
    RDFODBC_sb64.dll!SQLPrepareW(void * StatementHandle,wchar_t * StatementText,long TextLength) Line 4061    C++
    MPAPlugin.dll!SQLPrepareW(void * StatementHandle,long TextLength) Line 2251   C++
    odbc32.dll!SQLPrepareCover()    Unknown
    odbc32.dll!SQLPrepare()    Unknown
    sasodb.dll!00000000064d7ab9()   Unknown
    sasodb.dll!00000000064c3e06()   Unknown
    sasioodb.dll!00000000063c17a4() Unknown
    sasxdbi.dll!000000000644e0fa()  Unknown
    sasxdbi.dll!0000000006415abb()  Unknown
    sasyoio.dll!000000000bdaad5f()  Unknown
    sasyoio.dll!000000000bda7597()  Unknown
    sassqlp.dll!000000000ba4a787()  Unknown
    sassqlp.dll!000000000ba49d8e()  Unknown
    sassqlp.dll!000000000ba36853()  Unknown
    sassqlp.dll!000000000ba30cd2()  Unknown
    sassqx.dll!000000000b8a54b3()   Unknown
    sassqx.dll!000000000b8a4c0e()   Unknown
    sassql.dll!00000000092c147c()   Unknown
    sashost.dll!000000000384a366()  Unknown
    sashost.dll!0000000003850574()  Unknown
    kernel32.dll!BaseThreadInitThunk() Unknown
    ntdll.dll!RtlUserThreadStart() Unknown

第二次崩溃:

>   kernel32.dll!IsBadReadPtr() Unknown
    tkmk.dll!0000000010051baa() Unknown
    tkmk.dll!000000001005383d() Unknown
    tkmk.dll!0000000010053587() Unknown
    tkmk.dll!0000000010054f63() Unknown
    tkmk.dll!0000000010055713() Unknown
    tkmk.dll!0000000010056894() Unknown
    tkmk.dll!0000000010056715() Unknown
    tkmk.dll!000000001005692b() Unknown
    tkmk.dll!00000000100566f9() Unknown
    tkmk.dll!000000001004aaaa() Unknown
    sashost.dll!0000000003761589()  Unknown
    sashost.dll!00000000037521c4()  Unknown
    sashost.dll!000000000376628f()  Unknown
    sashost.dll!0000000003769d10()  Unknown
    sashost.dll!000000000375d509()  Unknown
    sashost.dll!00000000037706f0()  Unknown
    sashost.dll!000000000376f649()  Unknown
    0000000004844e40()  Unknown
    fe48daea1d7f4cf6()  Unknown
    cccccccccccccccc()  Unknown
    000000000cbd83d0()  Unknown
    RDFODBC_sb64.dll!Simba::Support::AutoPtr<sbicu_58::GregorianCalendar,long TextLength) Line 2251   C++
    odbc32.dll!SQLPrepareCover()    Unknown
    odbc32.dll!SQLPrepare()    Unknown
    sasodb.dll!00000000064a7ab9()   Unknown
    sasodb.dll!0000000006493e06()   Unknown
    sasioodb.dll!00000000063917a4() Unknown
    sasxdbi.dll!000000000641e0fa()  Unknown
    sasxdbi.dll!00000000063e5abb()  Unknown
    sasyoio.dll!000000000a22ad5f()  Unknown
    sasyoio.dll!000000000a227597()  Unknown
    sassqlp.dll!000000000a18a787()  Unknown
    sassqlp.dll!000000000a189d8e()  Unknown
    sassqlp.dll!000000000a176853()  Unknown
    sassqlp.dll!000000000a170cd2()  Unknown
    sassqx.dll!0000000009fd54b3()   Unknown
    sassqx.dll!0000000009fd4c0e()   Unknown
    sassql.dll!0000000009f8147c()   Unknown
    sashost.dll!000000000376a366()  Unknown
    sashost.dll!0000000003770574()  Unknown
    kernel32.dll!BaseThreadInitThunk() Unknown
    ntdll.dll!RtlUserThreadStart() Unknown

他们正在将驱动程序与SAS一起使用,并且在两个堆栈跟踪中,都好像要调用ICU(我们自己构建它并添加'sb'前缀),但是以某种方式(通过这4个帧)大量的垃圾[我假设调试器没有正确地释放堆栈???]])调用返回SAS?

我认为堆栈只是被破坏了,但是在第一个堆栈中,崩溃是由于断言当前未使用给定语句(断言永远不会失败)而引起的,但是,看起来在调试器中,传递给odbc32.dll!SQLPrepareCover()和传递给odbc32.dll!FreeStmt()的句柄与上面相同,因此断言将失败是有道理的,因为我们可以再次锁定我们的互斥锁(它们是递归的),并在不可能的地方重新输入。

除了使用光纤的SAS或其他某种绿色线程外,我想不出会导致这种情况的任何东西?还是信号处理程序? (但我认为这在Windows上的工作方式有所不同,我认为它会显示在堆栈上)。 ICU的某些功能指针表是否被损坏以某种方式指向SAS? ICU和SAS应该一无所知。

zyyzyyzhaoyiying 回答:什么会导致像这样的“翻倍”堆栈?

忘记了这个问题。

该问题最终是由安装了sas的seh处理程序引起的,该处理程序由于sas启用了浮点异常而被触发,然后被调用到驱动程序中。 ICU没想到会启用fp异常,触发一个异常,然后进行sas清理使进程崩溃

本文链接:https://www.f2er.com/3155580.html

大家都在问