h*8-P      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{ | } ~                                             0.5.0.0 Safe-Inferred )*46F Safe-Inferred4*'&%$"!)(# *'&%$"!)(#  Safe-Inferred)*4y1ghc-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.+,-.1/0+,-.1/0 Safe-Inferred"%&)*453465346 Safe-Inferred"()*46 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-clientBracketed version of debuggeeConnectTCP. Connects to a debuggee, runs the action, then closes the debuggee.Fghc-debug-client&Run a debuggee and connect to it. Use  debuggeeClose when you're done.Ighc-debug-client/Connect to a debuggee on the given socket. Use  debuggeeClose when you're done.Kghc-debug-client3Create a debuggee by loading a snapshot created by snapshot.Mghc-debug-clientStart an analysis session using a snapshot. This will not connect to a debuggee. The snapshot is created by snapshot.Nghc-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-clienthost of the tcp socket (e.g.  "127.0.0.1")ghc-debug-clientport of the tcp socket (e.g. 1235)Fghc-debug-client)path to executable to run as the debuggeeghc-debug-clientfilename of socket (e.g. "/tmp/ghc-debug")Ighc-debug-clientfilename of socket (e.g. "/tmp/ghc-debug")Jghc-debug-clienthost of the tcp socket (e.g.  "127.0.0.1")ghc-debug-clientport of the tcp socket (e.g. 1235) #()!"$%&'*B?>A@CDEFGHIJNKLMO #()!"$%&'*B?>A@CDEFGHIJNKLMO Safe-Inferred 4Pghc-debug-clientPause the debuggeeRghc-debug-clientResume the debuggeeSghc-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????Tghc-debug-client"Bracketed version of pause/resume.Yghc-debug-client,Decode a closure corresponding to the given  You should not use this function directly unless you know what you are doing. ^ will be much faster in general.[ghc-debug-client(Deference some StackFrames from a given \ghc-debug-client#Derference the PapPayload from the ^ghc-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 Y_ghc-debug-clientFetch all the blocks from the debuggee and add them to the block cache`ghc-debug-client+Query the debuggee for the list of GC Rootsaghc-debug-client4Query the debuggee for all the blocks it knows aboutbghc-debug-clientQuery the debuggee for source information about a specific info table. This requires your executable to be built with -finfo-table-map.cghc-debug-client1Query the debuggee for the list of saved objects.dghc-debug-client+Query the debuggee for the protocol versionPQURST_`abcdZ^YVXW[\]efPQURST_`abcdZ^YVXW[\]ef Safe-Inferred4Lughc-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.vghc-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.wghc-debug-clientPerform the given analysis whilst the debuggee is paused, then resume and apply the continuation to the result.>?FGNCDgMB@wPQURSTd`abc_^XWZ[\]efuvijklmnopqhA#() tsr>?FGNCDgMB@wPQURSTd`abc_^XWZ[\]efuvijklmnopqhA#() tsr Safe-Inferred4 xyzijklmnopq xyzijklmnopq  Safe-Inferred4{|~}{|~}  Safe-Inferred /4=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-Inferred4  Safe-Inferred/4ghc-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 "4 ghc-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-Inferred4!ghc-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 M& in order to perform offline analysis.MM Safe-Inferred(4"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"%&4$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. Safe-Inferred'4(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"(4)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-Inferred4*kghc-debug-clientSimple statistics about a heap, total objects, size and maximum object size Safe-Inferred"(4,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-Inferred4-@ghc-debug-client*Exports TypePointsFrom graph to a GML file !"#$%&'&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLLMNOPQRSTUMLVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&   ghc-debug-client-0.5.0.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.StringsGHC.Debug.SnapshotGHC.Debug.RetainersGHC.Debug.ProfileGHC.Debug.FragmentationGHC.Debug.ObjectEquivGHC.Debug.CountGHC.Debug.TypePointsFrom GHC.Debug.GMLghc-debug-client ghc-debug-common-0.5.0.0-inplaceGHC.Debug.Types.PtrBlockPtr ClosurePtr InfoTablePtrRawBlockStackPtrGHC.Debug.TypesSourceInformationinfoClosureType infoLabel infoModuleinfoName infoPositioninfoTypeGHC.Debug.Types.ClosuresQuintraversable quintraverseBlockCacheRequest 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 traceWriterunwithDebuggeeRunwithDebuggeeConnectwithDebuggeeConnectTCP debuggeeRundebuggeeConnectdebuggeeConnectTCPdebuggeeConnectWithTracerdebuggeeConnectWithTracerTCP snapshotInitsnapshotInitWithTracer snapshotRun debuggeeCloseoutputRequestLogpauseforkresume pausePoll withPause pauseThendereferenceClosureC addConstrDescdereferenceToClosurePtrdereferenceClosureDirectdereferenceClosuresdereferenceStackdereferencePapPayloaddereferenceConDescdereferenceClosureprecacheBlocksgcRoots allBlocks getSourceInfo savedObjectsversiondereferenceInfoTabledereferenceSRT$ghc-debug-convention-0.5.0.0-inplaceGHC.Debug.ConventionsocketDirectoryGHC.Debug.Types.Graph ppHeapGraph HeapGraphgraphrootsHeapGraphEntry hgeClosure hgeClosurePtrhgeDataHeapGraphIndexPapHIStackHIbuildHeapGraphmultiBuildHeapGraph runAnalysis findClosuresfindConstructorsfindWithInfoTablecomputeDominators retainerSizeannotateWithRetainerSizeconvertToHeapGraphTraceFunctionsIOpapTracesrtTrace stackTrace closTrace visitedVal conDescTraceClosurePtrWithInfo traceParFromMtracePar CensusStatsCScscountcssizecsmaxCountmkCS$fSemigroupCensusStats$fMonoidCensusStats$fShowCensusStats$fEqCensusStats$fSemigroupCount $fMonoidCount $fNumCount $fShowCount $fOrdCount $fEqCountTraceFunctions justClosures traceFromM stringProgramarrWordsProgramstringAnalysisarrWordsAnalysissnapshot traceFrom makeSnapshotfindRetainersOffindRetainersOfConstructorfindRetainersOfConstructorExactfindRetainersOfInfoTable findRetainersaddLocationToStackaddLocationToStack'displayRetainerStackdisplayRetainerStack'CensusByClosureTypecensusClosureType closureToKeyclosureCensusBycensus2LevelClosureTypewriteCensusByClosureTypePinnedCensusStatssummariseBlockscensusByMBlock censusByBlockcensusPinnedBlocks findBadPtrsprintMBlockCensusprintBlockCensus histogram$fSemigroupPinnedCensusStatsEquivMapprintObjectEquivobjectEquivAnalysis objectEquivparCountcountTypePointsFromnodesedgesEdgeKey edgeSource edgeTargetgetNodesgetEdgestypePointsFrom detectLeaksgetKey$fSemigroupTypePointsFrom$fMonoidTypePointsFrom$fShowRankInfo$fShowTypePointsFrom$fEqEdge $fOrdEdge $fShowEdgetypePointsFromToGML addSourceInfo writeTpfToGML StackCont PayloadContSizegetSizeghc-heap-9.6.1GHC.Exts.Heap.ClosureTypes ClosureTypeBCOFUNINVALID_OBJECTCONSTR CONSTR_1_0 CONSTR_0_1 CONSTR_2_0 CONSTR_1_1 CONSTR_0_2 CONSTR_NOCAFFUN_1_0FUN_0_1FUN_2_0FUN_1_1FUN_0_2 FUN_STATICTHUNK THUNK_1_0 THUNK_0_1 THUNK_2_0 THUNK_1_1 THUNK_0_2 THUNK_STATICTHUNK_SELECTORAPPAPAP_STACKIND IND_STATICRET_BCO RET_SMALLRET_BIGRET_FUN UPDATE_FRAME CATCH_FRAMEUNDERFLOW_FRAME STOP_FRAMEBLOCKING_QUEUE BLACKHOLE MVAR_CLEAN MVAR_DIRTYTVAR ARR_WORDSMUT_ARR_PTRS_CLEANMUT_ARR_PTRS_DIRTYMUT_ARR_PTRS_FROZEN_DIRTYMUT_ARR_PTRS_FROZEN_CLEAN MUT_VAR_CLEAN MUT_VAR_DIRTYWEAKPRIMMUT_PRIMTSOSTACK TREC_CHUNKATOMICALLY_FRAMECATCH_RETRY_FRAMECATCH_STM_FRAME WHITEHOLESMALL_MUT_ARR_PTRS_CLEANSMALL_MUT_ARR_PTRS_DIRTYSMALL_MUT_ARR_PTRS_FROZEN_DIRTYSMALL_MUT_ARR_PTRS_FROZEN_CLEANCOMPACT_NFDATA CONTINUATIONN_CLOSURE_TYPESGHC.Exts.Heap.InfoTable.Types StgInfoTableentryptrsnptrstipesrtlencodeClosure ConstrDescpkgmodlnameConstrDescCont DebugClosure ConstrClosure FunClosure ThunkClosureSelectorClosure PAPClosure APClosureAPStackClosure IndClosure BCOClosureBlackholeClosureArrWordsClosure MutArrClosureSmallMutArrClosure MVarClosure MutVarClosureBlockingQueueClosure WeakClosure TSOClosure StackClosure OtherClosureUnsupportedClosureMutPrimClosureTRecChunkClosure TVarClosure threadLabelprofsizelinkkeyvalueinfoptrArgsdataArgsselecteearityn_argsfunpayload indirecteeinstrsliteralsbcoptrsbitmapbytesarrWordsmccPtrsmccSize mccPayload queueHead queueTailvar blackHoleownerqueue cfinalizers finalizer global_linktsoStacktrecblocked_exceptionsbq what_next why_blockedflagsthreadId saved_errno alloc_limittot_stack_size stack_size stack_dirty stack_markinghvaluesrawWords_link ap_payload ap_st_size constrDesc current_valuedirtyentriesframesmlinknext_idx num_updates pap_payload prev_chunksrttvar_watch_queueDebugClosureWithExtraDCSextraDCSunDCSDebugClosureWithSizeDebugStackFrame frame_info frame_srtvalues FieldValueSNonPtrSPtr GenPapPayload getValues GenSrtPayloadgetSrtGenStackFrames getFrames InclusiveSizegetInclusiveSize PapPayload RetainerSizegetRetainerSize SizedClosure SizedClosureC SizedClosurePSrtCont SrtPayload StackFramesStgInfoTableWithPtr decodedTabletableId TRecEntryexpected_value new_valuetrec_num_updatestvar allClosuresdcSizenoSizeparseConstrDescquinmap ThreadMap ThreadStatebaseGHC.Realdivlimit of_interest checkSizecensusObjectEquivlookupRMrank_thresholdmin_iterations updateRankMap ratioRank