On Thu, Sep 28, 2017, at 08:51 PM, Nicholas Nethercote wrote: > I sometimes want to know the memory layout of a class/struct. Having all > the fields together makes that a *lot* easier.
Note that gdb's ptype command can help with this using "/m" which avoids printing methods. (And of course one can use gdb's python magic to do even cooler things if you want to see where there's wasted space, etc.) So, like: $ gdb OBJDIR/dist/bin/libxul.so (gdb) ptype/m JSContext type = struct JSContext : public JS::RootingContext, public js::MallocProvider<JSContext> { private: js::UnprotectedData runtime_; js::WriteOnceData kind_; js::WriteOnceData threadNative_; js::ThreadLocalData helperThread_; js::ThreadLocalData options_; js::ThreadLocalData arenas_; protected: js::ThreadLocalData enterCompartmentDepth_; private: static JS::Error reportedError; static JS::OOM reportedOOM; js::ThreadLocalData yieldCallback_; public: js::ThreadLocalData jitActivation; js::ThreadLocalData regexpStack; js::ThreadLocalData activation_; js::Activation * volatile profilingActivation_; private: js::ThreadLocalData interpreterStack_; public: const uintptr_t nativeStackBase; js::ThreadLocalData nativeStackQuota[3]; js::ThreadLocalData entryMonitor; js::ThreadLocalData noExecuteDebuggerTop; bool handlingSegFault; js::ThreadLocalData activityCallback; js::ThreadLocalData activityCallbackArg; js::ThreadLocalData requestDepth; private: js::ThreadLocalData autoFlushICache_; public: js::ThreadLocalData dtoaState; js::ThreadLocalData heapState; js::ThreadLocalData suppressGC; js::ThreadLocalData enableAccessValidation; js::ThreadLocalData inUnsafeRegion; js::ThreadLocalData generationalDisabled; js::ThreadLocalData compactingDisabledCount; js::ThreadLocalData keepAtoms; private: js::ThreadLocalData frontendCollectionPool_; mozilla::Atomic<bool, (mozilla::MemoryOrdering)2, void> suppressProfilerSampling; js::UnprotectedData geckoProfiler_; public: static const size_t TEMP_LIFO_ALLOC_PRIMARY_CHUNK_SIZE; private: js::ThreadLocalData tempLifoAlloc_; public: js::ThreadLocalData debuggerMutations; js::ThreadLocalData propertyRemovals; js::ThreadLocalData ionPcScriptCache; private: js::ThreadLocalData throwing; js::ThreadLocalData unwrappedException_; js::ThreadLocalData overRecursed_; js::ThreadLocalData propagatingForcedReturn_; js::ThreadLocalData liveVolatileJitFrameIter_; public: js::ThreadLocalData reportGranularity; js::ThreadLocalData resolvingList; js::ThreadLocalData generatingError; private: js::ThreadLocalData cycleDetectorVector_; public: js::UnprotectedData data; js::ThreadLocalData outstandingRequests; js::ThreadLocalData jitIsBroken; private: js::ThreadLocalData asyncStackForNewActivations_; public: js::ThreadLocalData asyncCauseForNewActivations; js::ThreadLocalData asyncCallIsExplicit; private: js::ThreadLocalData interruptCallbacks_; public: js::ThreadLocalData interruptCallbackDisabled; mozilla::Atomic<unsigned int, (mozilla::MemoryOrdering)0, void> interrupt_; mozilla::Atomic<unsigned int, (mozilla::MemoryOrdering)0, void> interruptRegExpJit_; private: mozilla::Atomic<bool, (mozilla::MemoryOrdering)2, void> handlingJitInterrupt_; public: js::FutexThread fx; js::ThreadLocalData osrTempData_; js::ThreadLocalData ionReturnOverride_; mozilla::Atomic<unsigned long, (mozilla::MemoryOrdering)0, void> jitStackLimit; js::ThreadLocalData jitStackLimitNoInterrupt; js::ThreadLocalData getIncumbentGlobalCallback; js::ThreadLocalData enqueuePromiseJobCallback; js::ThreadLocalData enqueuePromiseJobCallbackData; js::ThreadLocalData jobQueue; js::ThreadLocalData drainingJobQueue; js::ThreadLocalData stopDrainingJobQueue; js::ThreadLocalData promiseRejectionTrackerCallback; js::ThreadLocalData promiseRejectionTrackerCallbackData; typedef js::Vector InterruptCallbackVector; } Andrew _______________________________________________ dev-tech-js-engine-internals mailing list dev-tech-js-engine-internals@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-tech-js-engine-internals