[SERVER-58046] add demangled name to printStackTrace Created: 23/Jun/21  Updated: 27/Jan/24  Resolved: 25/Mar/22

Status: Closed
Project: Core Server
Component/s: None
Affects Version/s: None
Fix Version/s: 6.0.0-rc0

Type: Improvement Priority: Major - P3
Reporter: Billy Donahue Assignee: Billy Donahue
Resolution: Fixed Votes: 4
Labels: servicearch-wfbf-day
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Related
is related to SERVER-59314 Report file and line in stack traces Backlog
Assigned Teams:
Service Arch
Backwards Compatibility: Fully Compatible
Sprint: Service Arch 2022-03-21, Service Arch 2022-04-04
Participants:
Story Points: 1

 Description   

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"
          }
        ]
      }
    }
  }
}



 Comments   
Comment by Githook User [ 24/Mar/22 ]

Author:

{'name': 'Billy Donahue', 'email': 'billy.donahue@mongodb.com', 'username': 'BillyDonahue'}

Message: SERVER-58046 add demangled names to stacktrace
Branch: master
https://github.com/mongodb/mongo/commit/816d9b6e1e8646a40cf77b419d1129cd323dade7

Generated at Thu Feb 08 05:43:27 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.