h&5*w      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrs t u v w x y z { | } ~                                  Safe-Inferred ()24 Safe-Inferred2&*'&%$"!)(# *'&%$"!)(#  Safe-Inferred()21ghc-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.+,-./01+,-.1/0 Safe-Inferred!$%()2g34565346 Safe-Inferred!'()24 Bghc-debug-clientRun a DebugM a in the given environment.Cghc-debug-clientBracketed version of  debuggeeRun. Runs a debuggee, connects to it, runs the action, kills the process, then closes the debuggee.Dghc-debug-clientBracketed version of debuggeeConnect. Connects to a debuggee, runs the action, then closes the debuggee.Eghc-debug-client&Run a debuggee and connect to it. Use  debuggeeClose when you're done.Fghc-debug-client/Connect to a debuggee on the given socket. Use  debuggeeClose when you're done.Gghc-debug-client3Create a debuggee by loading a snapshot created by snapshot.Hghc-debug-clientStart an analysis session using a snapshot. This will not connect to a debuggee. The snapshot is created by snapshot.Ighc-debug-client%Close the connection to the debuggee.Cghc-debug-client)path to executable to run as the debuggeeghc-debug-clientfilename of socket (e.g. "/tmp/ghc-debug")Dghc-debug-clientfilename of socket (e.g. "/tmp/ghc-debug")Eghc-debug-client)path to executable to run as the debuggeeghc-debug-clientfilename of socket (e.g. "/tmp/ghc-debug")Fghc-debug-clientfilename of socket (e.g. "/tmp/ghc-debug") #()!"$%&'*>?@ABCDEFGHIJ #()!"$%&'*B?>A@CDEFIGHJ Safe-Inferred 2>?Kghc-debug-clientPause the debuggeeMghc-debug-clientResume the debuggeeNghc-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????Oghc-debug-client"Bracketed version of pause/resume.Rghc-debug-client,Decode a closure corresponding to the given  You should not use this function directly unless you know what you are doing. W will be much faster in general.Tghc-debug-client(Deference some StackFrames from a given Ughc-debug-client#Derference the PapPayload from the Wghc-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 RXghc-debug-clientFetch all the blocks from the debuggee and add them to the block cacheYghc-debug-client+Query the debuggee for the list of GC RootsZghc-debug-client4Query the debuggee for all the blocks it knows about[ghc-debug-clientQuery the debuggee for source information about a specific info table. This requires your executable to be built with -finfo-table-map.\ghc-debug-client1Query the debuggee for the list of saved objects.]ghc-debug-client+Query the debuggee for the protocol versionKLMNOPQRSTUVWXYZ[\]^KLPMNOXYZ[\]SWRQTUV^ Safe-Inferred2?mghc-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.nghc-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.oghc-debug-clientPerform the given analysis whilst the debuggee is paused, then resume and apply the continuation to the result. )#(>?@ABCDEFHIKLMNOPSTUVWXYZ[\]^_`abcdefghijklmno>?EFICD_HB@oKLPMNO]YZ[\XWSTUV^mnabcdefghi`A#() lkj Safe-Inferred2 abcdefghipqr pqrabcdefghi  Safe-Inferred2stuvstvu  Safe-Inferred .2>?ghc-debug-client/Map from Thread -> Information about the thread~ghc-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 w 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. wx|{z}y~ wx|{z}y~  Safe-Inferred2>?U  Safe-Inferred.2ghc-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-Inferred2Xghc-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 H& in order to perform offline analysis.HH Safe-Inferred'2ghc-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!$%2>?"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&2%9ghc-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!'2>?&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-Inferred2'ghc-debug-clientSimple statistics about a heap, total objects, size and maximum object size Safe-Inferred!'2>?)ghc-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-Inferred2*gghc-debug-client*Exports TypePointsFrom graph to a GML file !"#$%$&'()*+,-./0123456789:;<=>?@ABCDEFGHIJJKLMNOPQRSKJTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwvxvxvyvzv{v{v|v}v~vvv                                            $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$   ghc-debug-client-0.2.1.0-inplaceGHC.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.SnapshotGHC.Debug.RetainersGHC.Debug.ProfileGHC.Debug.FragmentationGHC.Debug.ObjectEquivGHC.Debug.CountGHC.Debug.TypePointsFrom GHC.Debug.GML ghc-debug-common-0.2.1.0-inplaceGHC.Debug.Types.PtrBlockPtr ClosurePtr InfoTablePtrRawBlockStackPtrGHC.Debug.TypesSourceInformationinfoClosureType infoLabel infoModuleinfoName infoPositioninfoTypeGHC.Debug.Types.ClosuresQuadtraversable quadtraverseBlockCacheRequest 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 debuggeeRundebuggeeConnect snapshotInit snapshotRun debuggeeCloseoutputRequestLogpauseforkresume pausePoll withPause pauseThendereferenceClosureCdereferenceClosureDirectdereferenceClosuresdereferenceStackdereferencePapPayloaddereferenceConDescdereferenceClosureprecacheBlocksgcRoots allBlocks getSourceInfo savedObjectsversiondereferenceInfoTable$ghc-debug-convention-0.2.0.0-inplaceGHC.Debug.ConventionsocketDirectoryGHC.Debug.Types.Graph ppHeapGraph HeapGraphgraphrootsHeapGraphEntry hgeClosure hgeClosurePtrhgeDataHeapGraphIndexPapHIStackHIbuildHeapGraphmultiBuildHeapGraph runAnalysis findClosuresfindConstructorsfindWithInfoTablecomputeDominators retainerSizeannotateWithRetainerSizeconvertToHeapGraphTraceFunctionsIOpapTrace stackTrace closTrace visitedVal conDescTraceClosurePtrWithInfo traceParFromMtracePar CensusStatsCScscountcssizecsmaxCountmkCS$fSemigroupCensusStats$fMonoidCensusStats$fShowCensusStats$fEqCensusStats$fSemigroupCount $fMonoidCount $fNumCount $fShowCount $fOrdCount $fEqCountTraceFunctions traceFromMsnapshot traceFrom makeSnapshotfindRetainersOffindRetainersOfConstructorfindRetainersOfConstructorExact findRetainersaddLocationToStackdisplayRetainerStackCensusByClosureTypecensusClosureType closureToKeyclosureCensusBycensus2LevelClosureTypewriteCensusByClosureTypeprofilePinnedCensusStatssummariseBlockscensusByMBlock censusByBlockcensusPinnedBlocks findBadPtrsprintMBlockCensusprintBlockCensus histogram$fSemigroupPinnedCensusStatsEquivMapprintObjectEquivobjectEquivAnalysis objectEquivparCountcountTypePointsFromnodesedgesEdgeKey edgeSource edgeTargetgetNodesgetEdgestypePointsFrom detectLeaksgetKey$fSemigroupTypePointsFrom$fMonoidTypePointsFrom$fShowRankInfo$fShowTypePointsFrom$fEqEdge $fOrdEdge $fShowEdgetypePointsFromToGML addSourceInfo writeTpfToGML StackCont PayloadContghc-heap-9.2.2GHC.Exts.Heap.InfoTable.Types StgInfoTabletipesrtlenptrsnptrsentrycodeGHC.Exts.Heap.ClosureTypes ClosureType WHITEHOLEWEAK UPDATE_FRAMEUNDERFLOW_FRAMETVARTSO TREC_CHUNK THUNK_STATICTHUNK_SELECTOR THUNK_2_0 THUNK_1_1 THUNK_1_0 THUNK_0_2 THUNK_0_1THUNK STOP_FRAMESTACKSMALL_MUT_ARR_PTRS_FROZEN_DIRTYSMALL_MUT_ARR_PTRS_FROZEN_CLEANSMALL_MUT_ARR_PTRS_DIRTYSMALL_MUT_ARR_PTRS_CLEAN RET_SMALLRET_FUNRET_BIGRET_BCOPRIMPAPN_CLOSURE_TYPES MVAR_DIRTY MVAR_CLEAN MUT_VAR_DIRTY MUT_VAR_CLEANMUT_PRIMMUT_ARR_PTRS_FROZEN_DIRTYMUT_ARR_PTRS_FROZEN_CLEANMUT_ARR_PTRS_DIRTYMUT_ARR_PTRS_CLEANINVALID_OBJECT IND_STATICIND FUN_STATICFUN_2_0FUN_1_1FUN_1_0FUN_0_2FUN_0_1 CONSTR_NOCAF CONSTR_2_0 CONSTR_1_1 CONSTR_1_0 CONSTR_0_2 CONSTR_0_1CONSTRCOMPACT_NFDATACATCH_STM_FRAMECATCH_RETRY_FRAME CATCH_FRAMEBLOCKING_QUEUE BLACKHOLEATOMICALLY_FRAME ARR_WORDSAP_STACKAPBCOFUN allClosuresdcSizenoSizeparseConstrDescquadmapClosure ConstrDescpkgnamemodlConstrDescCont DebugClosuretvar_watch_queue prev_chunk pap_payload num_updatesnext_idxmlinkframesentriesdirty current_value constrDesc ap_st_size ap_payload_link why_blocked what_nextvartsoStacktrectot_stack_sizethreadId stack_size stack_marking stack_dirtyselectee saved_errnorawWords queueTail queueHeadqueueptrArgspayloadownern_argsmccSizemccPtrs mccPayloadliteralsinstrsinfo indirecteehvalues global_linkfunflags finalizerdataArgs cfinalizersbytesbqblocked_exceptions blackHolebitmapbcoptrsarrWordsarity alloc_limitkeyvaluelinksizeprof TVarClosureTRecChunkClosureMutPrimClosure WeakClosureUnsupportedClosure ThunkClosure TSOClosure StackClosureSmallMutArrClosureSelectorClosure PAPClosure OtherClosure MutVarClosure MutArrClosure MVarClosure IndClosure FunClosure ConstrClosureBlockingQueueClosureBlackholeClosure BCOClosureArrWordsClosure APClosureAPStackClosureDebugClosureWithExtraunDCSDCSextraDCSDebugClosureWithSizeDebugStackFramevalues frame_info FieldValueSNonPtrSPtr GenPapPayload getValuesGenStackFrames getFrames InclusiveSizegetInclusiveSize PapPayload RetainerSizegetRetainerSizeSizegetSize SizedClosure SizedClosureC StackFramesStgInfoTableWithPtrtableId decodedTable TRecEntrytvartrec_num_updates new_valueexpected_value ThreadMap ThreadStatebaseGHC.Realdivlimit of_interest checkSizecensusObjectEquivlookupRMrank_thresholdmin_iterations updateRankMap ratioRank