Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-58046

add demangled name to printStackTrace

    • Type: Icon: Improvement Improvement
    • Resolution: Fixed
    • Priority: Icon: Major - P3 Major - P3
    • 6.0.0-rc0
    • Affects Version/s: None
    • Component/s: None
    • Service Arch
    • Fully Compatible
    • Service Arch 2022-03-21, Service Arch 2022-04-04
    • 1

      This can be helpful for human reading of stack traces in BF tickets, but they tend to be significantly longer than the mangled names. So what though?

      Here's an example.

      diff --git a/src/mongo/util/stacktrace_posix.cpp b/src/mongo/util/stacktrace_posix.cpp
      index 7b888f16c8..6476e42a7b 100644
      --- a/src/mongo/util/stacktrace_posix.cpp
      +++ b/src/mongo/util/stacktrace_posix.cpp
      @@ -41,6 +41,7 @@
       #include <iomanip>
       #include <iostream>
       #include <string>
      +#include <cxxabi.h>
      
       #include "mongo/base/init.h"
       #include "mongo/bson/json.h"
      @@ -164,6 +165,13 @@ void appendBacktrace(BSONObjBuilder* obj, IterationIface& iter, const Options& o
               }
               if (const auto& sym = meta.symbol(); sym) {
                   frame.append("s", sym.name());
      +            if (1) {
      +                int status;
      +                char* realname = abi::__cxa_demangle(std::string(sym.name()).c_str(), 0, 0, &status);
      +                if (status == 0)
      +                    frame.append("C", realname);
      +                std::free(realname);
      +            }
                   frame.append("s+", Hex(offsetFromBase(sym.base(), addr)));
               }
           }
      
      {
        "t": {
          "$date": "2021-06-23T18:53:24.158-04:00"
        },
        "s": "I",
        "c": "CONTROL",
        "id": 31380,
        "ctx": "conn12",
        "msg": "BACKTRACE",
        "attr": {
          "bt": {
            "backtrace": [
              {
                "a": "1068C46A1",
                "b": "104C3D000",
                "o": "1C876A1",
                "s": "_ZN5mongo18stack_trace_detail12_GLOBAL__N_119printStackTraceImplERKNS1_7OptionsEPNS_14StackTraceSinkE",
                "C": "mongo::stack_trace_detail::(anonymous namespace)::printStackTraceImpl(mongo::stack_trace_detail::(anonymous namespace)::Options const&, mongo::StackTraceSink*)",
                "s+": "121"
              },
              {
                "a": "1068C5B38",
                "b": "104C3D000",
                "o": "1C88B38",
                "s": "_ZN5mongo15printStackTraceEv",
                "C": "mongo::printStackTrace()",
                "s+": "28"
              },
              {
                "a": "1056663A4",
                "b": "104C3D000",
                "o": "A293A4",
                "s": "_ZN5mongo14CommandHelpers34shouldActivateFailCommandFailPointERKNS_7BSONObjERKNS_15NamespaceStringEPKNS_7CommandEPNS_6ClientE",
                "C": "mongo::CommandHelpers::shouldActivateFailCommandFailPoint(mongo::BSONObj const&, mongo::NamespaceString const&, mongo::Command const*, mongo::Client*)",
                "s+": "6B4"
              },
              {
                "a": "105665C68",
                "b": "104C3D000",
                "o": "A28C68",
                "s": "_ZN5mongo14CommandHelpers34shouldActivateFailCommandFailPointERKNS_7BSONObjEPKNS_17CommandInvocationEPNS_6ClientE",
                "C": "mongo::CommandHelpers::shouldActivateFailCommandFailPoint(mongo::BSONObj const&, mongo::CommandInvocation const*, mongo::Client*)",
                "s+": "78"
              },
              {
                "a": "10566A2A0",
                "b": "104C3D000",
                "o": "A2D2A0",
                "s": "_ZZN5mongo14CommandHelpers28evaluateFailCommandFailPointEPNS_16OperationContextEPKNS_17CommandInvocationEENK4$_19clERKNS_7BSONObjE",
                "C": "mongo::CommandHelpers::evaluateFailCommandFailPoint(mongo::OperationContext*, mongo::CommandInvocation const*)::$_19::operator()(mongo::BSONObj const&) const",
                "s+": "310"
              },
              {
                "a": "105666654",
                "b": "104C3D000",
                "o": "A29654",
                "s": "_ZN5mongo14CommandHelpers28evaluateFailCommandFailPointEPNS_16OperationContextEPKNS_17CommandInvocationE",
                "C": "mongo::CommandHelpers::evaluateFailCommandFailPoint(mongo::OperationContext*, mongo::CommandInvocation const*)",
                "s+": "134"
              },
              {
                "a": "104DFDFE3",
                "b": "104C3D000",
                "o": "1C0FE3",
                "s": "_ZN5mongo12_GLOBAL__N_118ParseAndRunCommand13RunInvocation6_setupEv",
                "C": "mongo::(anonymous namespace)::ParseAndRunCommand::RunInvocation::_setup()",
                "s+": "303"
              },
              {
                "a": "104DFBDCA",
                "b": "104C3D000",
                "o": "1BEDCA",
                "s": "_ZZN5mongo12_GLOBAL__N_118ParseAndRunCommand3runEvENK4$_20clEv",
                "C": "mongo::(anonymous namespace)::ParseAndRunCommand::run()::$_20::operator()() const",
                "s+": "F5A"
              },
              {
                "a": "104DFA7AF",
                "b": "104C3D000",
                "o": "1BD7AF",
                "s": "_ZN5mongo12_GLOBAL__N_118ParseAndRunCommand3runEv",
                "C": "mongo::(anonymous namespace)::ParseAndRunCommand::run()",
                "s+": "3F"
              },
              {
                "a": "104DF364F",
                "b": "104C3D000",
                "o": "1B664F",
                "s": "_ZN5mongo13ClientCommand8_executeEv",
                "C": "mongo::ClientCommand::_execute()",
                "s+": "31F"
              },
              {
                "a": "104DF580F",
                "b": "104C3D000",
                "o": "1B880F",
                "s": "_ZN5mongo13ClientCommand3runEv",
                "C": "mongo::ClientCommand::run()",
                "s+": "3F"
              },
              {
                "a": "104DF66F0",
                "b": "104C3D000",
                "o": "1B96F0",
                "s": "_ZN5mongo8Strategy13clientCommandENSt3__110shared_ptrINS_23RequestExecutionContextEEE",
                "C": "mongo::Strategy::clientCommand(std::__1::shared_ptr<mongo::RequestExecutionContext>)",
                "s+": "E0"
              },
              {
                "a": "104C593F6",
                "b": "104C3D000",
                "o": "1C3F6",
                "s": "_ZN5mongo15CommandOpRunner3runEv",
                "C": "mongo::CommandOpRunner::run()",
                "s+": "46"
              },
              {
                "a": "104C5917D",
                "b": "104C3D000",
                "o": "1C17D",
                "s": "_ZN5mongo13HandleRequest13handleRequestEv",
                "C": "mongo::HandleRequest::handleRequest()",
                "s+": "22D"
              },
              {
                "a": "104C5D665",
                "b": "104C3D000",
                "o": "20665",
                "s": "_ZZN5mongo15unique_functionIFvPNS_14future_details15SharedStateBaseEEE8makeImplIZNS1_10FutureImplINS1_8FakeVoidEE16makeContinuationINS_10DbResponseEZZNOS9_4thenIZNS_13HandleRequest3runEvE3$_4EEDaOT_ENKUlvE_clEvEUlPNS1_15SharedStateImplIS8_EEPNSJ_ISB_EEE_EENS7_ISG_EEOT0_EUlS3_E_EESF_SH_EN12SpecificImpl4callEOS3_",
                "C": "mongo::HandleRequest::run()::$_4 mongo::unique_function<void (mongo::future_details::SharedStateBase*)>::makeImpl<mongo::future_details::FutureImpl<mongo::HandleRequest::run()::$_4&&> mongo::future_details::FutureImpl<mongo::future_details::FakeVoid>::makeContinuation<mongo::DbResponse, auto mongo::future_details::FutureImpl<mongo::future_details::FakeVoid>::then<mongo::HandleRequest::run()::$_4>(mongo::HandleRequest::run()::$_4&&) &&::'lambda'()::operator()() const::'lambda'(mongo::future_details::SharedStateImpl<mongo::future_details::FakeVoid>*, mongo::future_details::SharedStateImpl<mongo::future_details::FakeVoid><mongo::DbResponse>*)>(auto mongo::future_details::FutureImpl<mongo::future_details::FakeVoid>::then<mongo::HandleRequest::run()::$_4>(mongo::HandleRequest::run()::$_4&&) &&::'lambda'()::operator()() const::'lambda'(mongo::future_details::SharedStateImpl<mongo::future_details::FakeVoid>*, mongo::future_details::SharedStateImpl<mongo::future_details::FakeVoid><mongo::DbResponse>*)&&)::'lambda'(mongo::future_details::SharedStateBase*)>('lambda'())::SpecificImpl::call(mongo::future_details::SharedStateBase*&&)",
                "s+": "145"
              },
              {
                "a": "104C5BDDA",
                "b": "104C3D000",
                "o": "1EDDA",
                "s": "_ZN5mongo14future_details15SharedStateBase20transitionToFinishedEv",
                "C": "mongo::future_details::SharedStateBase::transitionToFinished()",
                "s+": "9A"
              },
              {
                "a": "104C5C9D9",
                "b": "104C3D000",
                "o": "1F9D9",
                "s": "_ZZN5mongo15unique_functionIFvPNS_14future_details15SharedStateBaseEEE8makeImplIZNS1_10FutureImplINS1_8FakeVoidEE16makeContinuationIvZZNOS9_4thenIZNS_13HandleRequest3runEvE3$_3EEDaOT_ENKUlvE_clEvEUlPNS1_15SharedStateImplIS8_EESK_E_EENS7_ISF_EEOT0_EUlS3_E_EESE_SG_EN12SpecificImpl4callEOS3_",
                "s+": "E9"
              },
              {
                "a": "104C5BDDA",
                "b": "104C3D000",
                "o": "1EDDA",
                "s": "_ZN5mongo14future_details15SharedStateBase20transitionToFinishedEv",
                "C": "mongo::future_details::SharedStateBase::transitionToFinished()",
                "s+": "9A"
              },
              {
                "a": "104C5A8FA",
                "b": "104C3D000",
                "o": "1D8FA",
                "s": "_ZN5mongo13HandleRequest3runEv",
                "C": "mongo::HandleRequest::run()",
                "s+": "140A"
              },
              {
                "a": "104C5B2F7",
                "b": "104C3D000",
                "o": "1E2F7",
                "s": "_ZN5mongo23ServiceEntryPointMongos13handleRequestEPNS_16OperationContextERKNS_7MessageE",
                "C": "mongo::ServiceEntryPointMongos::handleRequest(mongo::OperationContext*, mongo::Message const&)",
                "s+": "C7"
              },
              {
                "a": "104C93CC7",
                "b": "104C3D000",
                "o": "56CC7",
                "s": "_ZN5mongo9transport19ServiceStateMachine4Impl14processMessageEv",
                "C": "mongo::transport::ServiceStateMachine::Impl::processMessage()",
                "s+": "227"
              },
              {
                "a": "104C9A6AD",
                "b": "104C3D000",
                "o": "5D6AD",
                "s": "_ZZNO5mongo14future_details10FutureImplINS0_8FakeVoidEE4thenIZNS_9transport19ServiceStateMachine4Impl12startNewLoopERKNS_6StatusEE3$_9EEDaOT_ENKUlOS2_E_clESF_",
                "C": "auto mongo::future_details::FutureImpl<mongo::future_details::FakeVoid>::then<mongo::transport::ServiceStateMachine::Impl::startNewLoop(mongo::Status const&)::$_9>(mongo::transport::ServiceStateMachine::Impl::startNewLoop(mongo::Status const&)::$_9&&) &&::'lambda'(mongo::future_details::FakeVoid&&)::operator()('lambda'(mongo::future_details::FakeVoid&&)) const",
                "s+": "2D"
              },
              {
                "a": "104C947DE",
                "b": "104C3D000",
                "o": "577DE",
                "s": "_ZN5mongo9transport19ServiceStateMachine4Impl12startNewLoopERKNS_6StatusE",
                "C": "mongo::transport::ServiceStateMachine::Impl::startNewLoop(mongo::Status const&)",
                "s+": "10E"
              },
              {
                "a": "104C9C95F",
                "b": "104C3D000",
                "o": "5F95F",
                "s": "_ZZN5mongo15unique_functionIFvNS_6StatusEEE8makeImplIZZNS_9transport19ServiceStateMachine4Impl12startNewLoopERKS1_ENK4$_11clES1_EUlS1_E_EEDaOT_EN12SpecificImpl4callEOS1_",
                "C": "auto mongo::unique_function<void (mongo::Status)>::makeImpl<mongo::transport::ServiceStateMachine::Impl::startNewLoop(mongo::Status const&)::$_11::operator()(mongo::Status) const::'lambda'(mongo::Status)>(mongo::transport::ServiceStateMachine::Impl::startNewLoop(mongo::Status const&)::$_11::operator()(mongo::Status) const::'lambda'(mongo::Status)&&)::SpecificImpl::call(mongo::Status&&)",
                "s+": "4F"
              },
              {
                "a": "10621E5DE",
                "b": "104C3D000",
                "o": "15E15DE",
                "s": "_ZZN5mongo15unique_functionIFvNS_6StatusEEE8makeImplIZNS_9transport26ServiceExecutorSynchronous18runOnDataAvailableERKNSt3__110shared_ptrINS5_7SessionEEES3_E3$_5EEDaOT_EN12SpecificImpl4callEOS1_",
                "C": "auto mongo::unique_function<void (mongo::Status)>::makeImpl<mongo::transport::ServiceExecutorSynchronous::runOnDataAvailable(std::__1::shared_ptr<mongo::transport::Session> const&, mongo::unique_function<void (mongo::Status)>)::$_5>(mongo::transport::ServiceExecutorSynchronous::runOnDataAvailable(std::__1::shared_ptr<mongo::transport::Session> const&, mongo::unique_function<void (mongo::Status)>)::$_5&&)::SpecificImpl::call(mongo::Status&&)",
                "s+": "3E"
              },
              {
                "a": "10621AE57",
                "b": "104C3D000",
                "o": "15DDE57",
                "s": "_ZZN5mongo9transport15ServiceExecutor8scheduleENS_15unique_functionIFvNS_6StatusEEEEENUlvE_clEv",
                "C": "mongo::transport::ServiceExecutor::schedule(mongo::unique_function<void (mongo::Status)>)::'lambda'()::operator()()",
                "s+": "37"
              },
              {
                "a": "10621E2D8",
                "b": "104C3D000",
                "o": "15E12D8",
                "s": "_ZZN5mongo15unique_functionIFvvEE8makeImplIZNS_9transport26ServiceExecutorSynchronous12scheduleTaskES2_NS4_15ServiceExecutor13ScheduleFlagsEE3$_4EEDaOT_EN12SpecificImpl4callEv",
                "C": "auto mongo::unique_function<void ()>::makeImpl<mongo::transport::ServiceExecutorSynchronous::scheduleTask(mongo::unique_function<void ()>, mongo::transport::ServiceExecutor::ScheduleFlags)::$_4>(mongo::transport::ServiceExecutorSynchronous::scheduleTask(mongo::unique_function<void ()>, mongo::transport::ServiceExecutor::ScheduleFlags)::$_4&&)::SpecificImpl::call()",
                "s+": "168"
              },
              {
                "a": "10621F008",
                "b": "104C3D000",
                "o": "15E2008",
                "s": "_ZN5mongo12_GLOBAL__N_17runFuncEPv",
                "C": "mongo::(anonymous namespace)::runFunc(void*)",
                "s+": "18"
              },
              {
                "a": "7FFF205FF8FC",
                "b": "7FFF205F9000",
                "o": "68FC",
                "s": "_pthread_start",
                "s+": "E0"
              },
              {
                "a": "7FFF205FB443",
                "b": "7FFF205F9000",
                "o": "2443",
                "s": "thread_start",
                "s+": "F"
              }
            ],
            "processInfo": {
              "mongodbVersion": "5.0.0-alpha0-1193-gfaec09d",
              "gitVersion": "faec09dbc6bb19cf0e2e457c9c11258460be7f11",
              "compiledModules": [
                "enterprise"
              ],
              "uname": {
                "sysname": "Darwin",
                "release": "20.5.0",
                "version": "Darwin Kernel Version 20.5.0: Sat May  8 05:10:33 PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64",
                "machine": "x86_64"
              },
              "somap": [
                {
                  "path": "/Users/billy/prog/mongodb/mongo/build/install/bin/mongos",
                  "machType": 2,
                  "b": "104C3D000",
                  "vmaddr": "100000000",
                  "buildId": "FE6F77E70D8E34A889947769ED8D96DA"
                },
                {
                  "path": "/usr/lib/system/libsystem_pthread.dylib",
                  "machType": 6,
                  "b": "7FFF205F9000",
                  "vmaddr": "7FFF20308000",
                  "buildId": "17482C9D061E3769AC9EBE1239D33098"
                }
              ]
            }
          }
        }
      }
      

            Assignee:
            billy.donahue@mongodb.com Billy Donahue
            Reporter:
            billy.donahue@mongodb.com Billy Donahue
            Votes:
            4 Vote for this issue
            Watchers:
            11 Start watching this issue

              Created:
              Updated:
              Resolved: