h&7;,!      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwx y z { | } ~                                           Safe-Inferred )*35. !"#$%! %"$# Safe-Inferred3l*,+-854320/761.-854320/761.*,+ Safe-Inferred)*3a?ghc-debug-clientClear the part of the cache which will become invalid after pausing For example, we need to clear blocks, but can keep the info table caches.9:;<=>?9:; Safe-Inferred"%&)*3ABCDCABD Safe-Inferred"()*35 Pghc-debug-clientRun a DebugM a in the given environment.Qghc-debug-clientBracketed version of  debuggeeRun. Runs a debuggee, connects to it, runs the action, kills the process, then closes the debuggee.Rghc-debug-clientBracketed version of debuggeeConnect. Connects to a debuggee, runs the action, then closes the debuggee.Sghc-debug-client&Run a debuggee and connect to it. Use  debuggeeClose when you're done.Ughc-debug-client/Connect to a debuggee on the given socket. Use  debuggeeClose when you're done.Vghc-debug-client3Create a debuggee by loading a snapshot created by snapshot.Xghc-debug-clientStart an analysis session using a snapshot. This will not connect to a debuggee. The snapshot is created by snapshot.Yghc-debug-client%Close the connection to the debuggee.Qghc-debug-client)path to executable to run as the debuggeeghc-debug-clientfilename of socket (e.g. "/tmp/ghc-debug")Rghc-debug-clientfilename of socket (e.g. "/tmp/ghc-debug")Sghc-debug-client)path to executable to run as the debuggeeghc-debug-clientfilename of socket (e.g. "/tmp/ghc-debug")Ughc-debug-clientfilename of socket (e.g. "/tmp/ghc-debug")-.167/023458LMNOPQRSTUVWXYZ-.167/023458PMLONQRSTUYVWXZ Safe-Inferred 3?[ghc-debug-clientPause the debuggee]ghc-debug-clientResume the debuggee^ghc-debug-clientLike pause, but wait for the debuggee to pause itself. It currently impossible to resume after a pause caused by a poll.?????????? Is that true???? can we not just call resume????_ghc-debug-client"Bracketed version of pause/resume.dghc-debug-client,Decode a closure corresponding to the given  You should not use this function directly unless you know what you are doing. i will be much faster in general.fghc-debug-client(Deference some StackFrames from a given gghc-debug-client#Derference the PapPayload from the ighc-debug-client Consult the ! for the block which contains a specific closure, if it's not there then try to fetch the right block, if that fails, call djghc-debug-clientFetch all the blocks from the debuggee and add them to the block cachekghc-debug-client+Query the debuggee for the list of GC Rootslghc-debug-client4Query the debuggee for all the blocks it knows aboutmghc-debug-clientQuery the debuggee for source information about a specific info table. This requires your executable to be built with -finfo-table-map.nghc-debug-client1Query the debuggee for the list of saved objects.oghc-debug-client+Query the debuggee for the protocol version[\]^_`abcdefghijklmnopq[\`]^_jklmnoeidacbfghpq Safe-Inferred3rghc-debug-clientBuild a heap graph starting from the given root. The first argument controls how many levels to recurse. You nearly always want to set this to a small number ~ 10, as otherwise you can easily run out of memory.sghc-debug-clientBuild a heap graph starting from multiple roots. The first argument controls how many levels to recurse. You nearly always want to set this value to a small number ~ 10 as otherwise you can easily run out of memory.tghc-debug-clientPerform the given analysis whilst the debuggee is paused, then resume and apply the continuation to the result. 716LMNOPQRSTXY[\]^_`bcefghijklmnopqrstLMSTYQRXPNt[\`]^_oklmnjicbefghpqrs O167 Safe-Inferred3 uvw uvw  Safe-Inferred3Jxyz{xy{z  Safe-Inferred /3?}ghc-debug-client/Map from Thread -> Information about the threadghc-debug-clientA  with some additional information which needs to be communicated across to another thread.ghc-debug-clientState local to a thread, there are $threads spawned, each which deals with (address % 8) % threads. Each thread therefore:Outer map, segmented by MBlock!Inner map, blocks for that MBlock4Inner IOBitArray, visited information for that blockghc-debug-clientA generic heap traversal function which will use a small amount of memory linear in the heap size. Using this function with appropiate accumulation functions you should be able to traverse quite big heaps in not a huge amount of memory.The performance of this parralel version depends on how much contention the functions given in | content for the handle connecting for the debuggee (which is protected by an MVar). With no contention, and precached blocks, the workload can be very evenly distributed leading to high core utilisation.As performance depends highly on contention, snapshot mode is much more amenable to parrelisation where the time taken for requests is much lower.ghc-debug-clientA parellel tracing function. |}~ |}~  Safe-Inferred3?  Safe-Inferred/3"ghc-debug-clientA generic heap traversal function which will use a small amount of memory linear in the heap size. Using this function with appropiate accumulation functions you should be able to traverse quite big heaps in not a huge amount of memory.    Safe-Inferred "3Wghc-debug-clientFind all the strings and then print out how many duplicates there areghc-debug-clientFind the parents of Bin nodesghc-debug-client)Find how many distinct ArrWords there are Safe-Inferred3ghc-debug-clientMake a snapshot of the current heap and save it to the given file.ghc-debug-clientTraverse the tree from GC roots, to populate the caches with everything necessary.ghc-debug-clientPause the process and create a snapshot of the heap. The snapshot can then be loaded with X& in order to perform offline analysis.XX Safe-Inferred(3!%ghc-debug-clientFrom the given roots, find any path to one of the given pointers. Note: This function can be quite slow! The first argument is a limit to how many paths to find. You should normally set this to a small number such as 10. Safe-Inferred"%&3?#ghc-debug-client;Perform a heap census in the same style as the -hT profile.ghc-debug-clientGeneral function for performing a heap census in constant memoryghc-debug-clientPerform a 2-level census where the keys are the type of the closure in addition to the type of ptrs of the closure. This can be used to distinguish between lists of different type for example.ghc-debug-clientPeform a profile at the given interval (in seconds), the result will be rendered after each iteration using  eventlog2html. Safe-Inferred'3&ghc-debug-clientPrint a summary of the given raw blocks This is useful to see how many MBlocks and how many pinned blocks there are.ghc-debug-client;Perform a heap census by which MBlock each closure lives inghc-debug-client>Perform a census based on which block each closure resides in.ghc-debug-client%Only census the given (pinned) blocksghc-debug-clientGiven a pinned block census, find the ARR_WORDS objects which are in the blocks which are < 10 % utilised. The return list is sorted by how many times each distinct ARR_WORDS appears on the heap.ghc-debug-clientPrint out a block censusghc-debug-client4Print either a MBlock or Block census as a histogram   Safe-Inferred"(3?(ghc-debug-client.How big to allow the priority queue to grow toghc-debug-clientHow many times an object must appear per 100 000 closures to be "interesting" and kept for the future.ghc-debug-client#O(1) due to psqueues implementationghc-debug-clientGeneral function for performing a heap census in constant memory Safe-Inferred3)=ghc-debug-clientSimple statistics about a heap, total objects, size and maximum object size Safe-Inferred"(3?+pghc-debug-client(Perform a "type points from" heap censusghc-debug-clientRepeatedly call typesPointsFrom* and perform the leak detection analysis.ghc-debug-clientLookup suitable candidates from the RankMap , Chooses values based on  and ghc-debug-clientUpdate the current rank predictions based on the difference between two censuses.ghc-debug-clientCompute how to update the ranks based on the difference between two censuses. Safe-Inferred3,ghc-debug-client*Exports TypePointsFrom graph to a GML file !"#$$%&'()**+,+-./.0.1.2.3.3456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZZ[\]^_`abc[Zdefghijklmnopqrstuvwxyz{|}~                                                +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  /ghc-debug-client-0.4.0.1-EmMz4tKDCWZ6R8l3gHuJ42GHC.Debug.ClientGHC.Debug.Client.BlockCacheGHC.Debug.Client.Monad.ClassGHC.Debug.Client.RequestCacheGHC.Debug.Client.Monad.SimpleGHC.Debug.Client.MonadGHC.Debug.Client.QueryGHC.Debug.Client.SearchGHC.Debug.DominatorsGHC.Debug.ParTraceGHC.Debug.Profile.TypesGHC.Debug.TraceGHC.Debug.StringsGHC.Debug.SnapshotGHC.Debug.RetainersGHC.Debug.ProfileGHC.Debug.FragmentationGHC.Debug.ObjectEquivGHC.Debug.CountGHC.Debug.TypePointsFrom GHC.Debug.GML/ghc-debug-common-0.4.0.0-GOgFrHPTY0921YRRYrzHDWGHC.Debug.Types infoPosition infoModule infoLabelinfoTypeinfoClosureTypeinfoNameSourceInformationGHC.Debug.Types.Graph ppHeapGraphhgeData hgeClosure hgeClosurePtrHeapGraphEntryHeapGraphIndexStackHIPapHIgraphroots HeapGraphGHC.Debug.Types.Closures quintraverseQuintraversableGHC.Debug.Types.Ptr InfoTablePtr ClosurePtrStackPtrBlockPtrRawBlock3ghc-debug-convention-0.4.0.0-Eb2jznfWxrf8jo79hf1HVhGHC.Debug.ConventionsocketDirectoryBlockCacheRequest LookupClosurePopulateBlockCache BlockCacheemptyBlockCache addBlocksbcSizehandleBlockReq$fBinaryBlockCache$fHashableBlockCacheRequest$fEqBlockCacheRequest$fShowBlockCacheRequestMode SnapshotMode SocketMode DebugMonadDebugEnvrequest requestBlocktraceMsgprintRequestLogrunDebug runDebugTracenewEnv saveCache loadCache unsafeLiftIO RequestCachecacheReq lookupReqemptyRequestCacheputCachegetCacheclearMovableRequests$fBinaryRequestCacheDebugMDebuggee runSimple$fBinarySnapshot$fDebugMonadDebugM$fMonadFailDebugM$fFunctorDebugM$fApplicativeDebugM $fMonadDebugM$fMonadFixDebugMrunTrace traceWriterunwithDebuggeeRunwithDebuggeeConnect debuggeeRundebuggeeConnectdebuggeeConnectWithTracer snapshotInitsnapshotInitWithTracer snapshotRun debuggeeCloseoutputRequestLogpauseforkresume pausePoll withPause pauseThendereferenceClosureC addConstrDescdereferenceToClosurePtrdereferenceClosureDirectdereferenceClosuresdereferenceStackdereferencePapPayloaddereferenceConDescdereferenceClosureprecacheBlocksgcRoots allBlocks getSourceInfo savedObjectsversiondereferenceInfoTabledereferenceSRTbuildHeapGraphmultiBuildHeapGraph runAnalysis findClosuresfindConstructorsfindWithInfoTablecomputeDominators retainerSizeannotateWithRetainerSizeconvertToHeapGraphTraceFunctionsIOpapTracesrtTrace stackTrace closTrace visitedVal conDescTraceClosurePtrWithInfo traceParFromMtracePar CensusStatsCScscountcssizecsmaxCountmkCS$fSemigroupCensusStats$fMonoidCensusStats$fShowCensusStats$fEqCensusStats$fSemigroupCount $fMonoidCount $fNumCount $fShowCount $fOrdCount $fEqCountTraceFunctions justClosures traceFromM stringProgramarrWordsProgramstringAnalysisarrWordsAnalysissnapshot traceFrom makeSnapshotfindRetainersOffindRetainersOfConstructorfindRetainersOfConstructorExact findRetainersaddLocationToStackaddLocationToStack'displayRetainerStackdisplayRetainerStack'CensusByClosureTypecensusClosureType closureToKeyclosureCensusBycensus2LevelClosureTypewriteCensusByClosureTypeprofilePinnedCensusStatssummariseBlockscensusByMBlock censusByBlockcensusPinnedBlocks findBadPtrsprintMBlockCensusprintBlockCensus histogram$fSemigroupPinnedCensusStatsEquivMapprintObjectEquivobjectEquivAnalysis objectEquivparCountcountTypePointsFromnodesedgesEdgeKey edgeSource edgeTargetgetNodesgetEdgestypePointsFrom detectLeaksgetKey$fSemigroupTypePointsFrom$fMonoidTypePointsFrom$fShowRankInfo$fShowTypePointsFrom$fEqEdge $fOrdEdge $fShowEdgetypePointsFromToGML addSourceInfo writeTpfToGML StackCont PayloadContghc-heap-9.2.4GHC.Exts.Heap.ClosureTypes ClosureTypeAPAP_STACK ARR_WORDSATOMICALLY_FRAME BLACKHOLEBLOCKING_QUEUE CATCH_FRAMECATCH_RETRY_FRAMECATCH_STM_FRAMECOMPACT_NFDATACONSTR CONSTR_0_1 CONSTR_0_2 CONSTR_1_0 CONSTR_1_1 CONSTR_2_0 CONSTR_NOCAFFUN_0_1FUN_0_2FUN_1_0FUN_1_1FUN_2_0 FUN_STATICIND IND_STATICINVALID_OBJECTMUT_ARR_PTRS_CLEANMUT_ARR_PTRS_DIRTYMUT_ARR_PTRS_FROZEN_CLEANMUT_ARR_PTRS_FROZEN_DIRTYMUT_PRIM MUT_VAR_CLEAN MUT_VAR_DIRTY MVAR_CLEAN MVAR_DIRTYN_CLOSURE_TYPESPAPPRIMRET_BCORET_BIGRET_FUN RET_SMALLSMALL_MUT_ARR_PTRS_CLEANSMALL_MUT_ARR_PTRS_DIRTYSMALL_MUT_ARR_PTRS_FROZEN_CLEANSMALL_MUT_ARR_PTRS_FROZEN_DIRTYSTACK STOP_FRAMETHUNK THUNK_0_1 THUNK_0_2 THUNK_1_0 THUNK_1_1 THUNK_2_0THUNK_SELECTOR THUNK_STATIC TREC_CHUNKTSOTVARUNDERFLOW_FRAME UPDATE_FRAMEWEAK WHITEHOLEBCOFUN allClosuresquinmapparseConstrDescdcSizenoSizeClosure SizedClosure SizedClosureC SizedClosurePConstrDescContDebugClosureWithSizeDebugClosureWithExtraunDCSDCSextraDCSSizegetSize InclusiveSizegetInclusiveSize RetainerSizegetRetainerSizeStgInfoTableWithPtr decodedTabletableId DebugClosurerawWordshvaluesentriesnext_idx prev_chunk num_updatestvar_watch_queue current_valuemlink finalizer cfinalizersframes stack_marking stack_dirty stack_sizetot_stack_size alloc_limitdirty saved_errnothreadIdflags why_blocked what_next threadLabelbqblocked_exceptionstrectsoStack global_link_linkqueueowner blackHole queueTail queueHead mccPayloadmccSizemccPtrsarrWordsbytesbitmapbcoptrsliteralsinstrs indirecteepayload ap_st_size ap_payload pap_payloadfunn_argsarityselecteesrt constrDescdataArgsptrArgsinfovarproflinkkeyvaluesizeUnsupportedClosure OtherClosureMutPrimClosureTRecChunkClosure TVarClosure WeakClosure StackClosure TSOClosureBlockingQueueClosure MutVarClosure MVarClosureSmallMutArrClosure MutArrClosureArrWordsClosureBlackholeClosure BCOClosure IndClosureAPStackClosure APClosure PAPClosureSelectorClosure ThunkClosure ConstrClosure FunClosure TRecEntrytrec_num_updates new_valueexpected_valuetvar GenPapPayload getValues PapPayload GenSrtPayloadgetSrt SrtPayloadSrtCont StackFramesGenStackFrames getFramesDebugStackFramevalues frame_srt frame_info ConstrDescmodlpkgname FieldValueSPtrSNonPtrGHC.Exts.Heap.InfoTable.Types StgInfoTableentrynptrsptrssrtlentipecode ThreadMap ThreadStatebaseGHC.Realdivlimit of_interest checkSizecensusObjectEquivlookupRMrank_thresholdmin_iterations updateRankMap ratioRank