DIRECTORY IO USING[STREAM], Rope USING[ROPE], StackCirio USING[Stack]; RemoteCirio: CEDAR DEFINITIONS = BEGIN Connection: TYPE = REF ConnectionBody; ConnectionBody: TYPE; OpenConnection: PROC[remoteName: Rope.ROPE, portNum: CARD, workingDirectories: LIST OF Rope.ROPE, reports: IO.STREAM] RETURNS[Connection]; FlushUnknownFileCache: PROC[connection: Connection, reports: IO.STREAM]; CloseConnection: PROC[connection: Connection, reports: IO.STREAM]; DestroyRemoteWorld: PROC[connection: Connection]; StopRemoteWorld: PROC[connection: Connection, reports: IO.STREAM] RETURNS[nThreads: CARD]; ThreadProperty: TYPE = RECORD[ SELECT case: * FROM any => [], callingDebugger => [], ready => [], context => [name: Rope.ROPE], ENDCASE]; FindThreadsWithProperty: PROC[connection: Connection, property: ThreadProperty, reports: IO.STREAM] RETURNS[LIST OF -- threadIndex -- CARD]; GetThreadTitleText: PROC[connection: Connection, threadIndex: CARD] RETURNS[Rope.ROPE]; ThreadIndexFromID: PROC[ID: CARD, connection: Connection] RETURNS [index: CARD _ LAST[CARD]]; ThreadIDFromIndex: PROC[index: CARD, connection: Connection] RETURNS [ID: CARD _ LAST[CARD]]; ShowQuickSummary: PROC[connection: Connection, threadIndex: CARD, stopFlag: REF BOOLEAN, on: IO.STREAM, long: BOOL]; GetThreadDebuggingBanner: PROC[connection: Connection, threadIndex: CARD, reports: IO.STREAM] RETURNS[Rope.ROPE]; AbortThread: PROC[connection: Connection, threadIndex: CARD, reports: IO.STREAM] RETURNS[newThreadTitleText: Rope.ROPE]; KillThread: PROC[connection: Connection, threadIndex: CARD, reports: IO.STREAM] RETURNS[newThreadTitleText: Rope.ROPE]; FreezeThread: PROC[connection: Connection, threadIndex: CARD, reports: IO.STREAM] RETURNS[newThreadTitleText: Rope.ROPE]; ProceedThread: PROC[connection: Connection, threadIndex: CARD, reports: IO.STREAM] RETURNS[newThreadTitleText: Rope.ROPE]; DbxExamineThread: PROC[connection: Connection, threadIndex: CARD, reports: IO.STREAM] RETURNS[nThreads: CARD]; ResumeRemoteWorldWithOnlyVP0: PROC[connection: Connection]; ResumeRemoteWorld: PROC[connection: Connection]; GetDummyStack: PROC[connection: Connection, reports: IO.STREAM]RETURNS[StackCirio.Stack]; FocusOnThread: PROC[connection: Connection, threadIndex: CARD, reports: IO.STREAM]RETURNS[newRemoteThreadIndex: CARD]; GetStackForCurrentThread: PROC[connection: Connection, reports: IO.STREAM]RETURNS[StackCirio.Stack]; AddSearchDirectory: PROC [connection: Connection, directoryPath: Rope.ROPE, reports: IO.STREAM]; RemoveSearchDirectory: PROC [connection: Connection, directoryPath: Rope.ROPE, reports: IO.STREAM]; ListSearchDirectory: PROC [connection: Connection, reports: IO.STREAM]; ClearSearchDirectory: PROC [connection: Connection, reports: IO.STREAM]; InstallBreakCheckDaemon: PROC [connection: Connection, reports: IO.STREAM]; StopBreakCheckDaemon: PROC [connection: Connection, reports: IO.STREAM]; END.. À RemoteCirio.mesa Sturgis, March 14, 1990 4:19 pm PST Last changed by Theimer on October 31, 1989 8:15:24 pm PST Last tweaked by Mike Spreitzer on December 11, 1990 4:13 pm PST Philip James, February 3, 1992 10:33 am PST Udagawa, January 13, 1991 5:39 pm PST Laurie Horton, November 25, 1991 3:16 pm PST Types Connections Working directory is where we shall look for Mob files if we don't find them elsewhere. Normally, this is the working directory on the D-machine in which the debugger tool was called. A record is kept of unknown files, so that later attempts to find them fail fast. That list of unknown files is erased by this procedure. The tool should endevour to make sure the connection is ultimately closed. Only one connection can be open at a time to a pair. This blows away the remote pcr world and closes the connection. Threads permits examination of threads following procedures require that the world be stopped Examines the threads to see if any satisfy the given property. Returns a list of indices of threads that satisfy the given property. NOTE WELL: the thread indices are indices into a table in connection, they are NOT the remote thread index. (The remote thread index will appear in the ThreadTitleText and is returned by FocusOnThread ) arranges for remote world to call DBX on the thread. Does not return to client until remote world dbx lets go. Because the remote world has been running, the thread structure may be altered. The client must reconstruct that structure allows remote world to continue execution, however, only virtual processor 0 will be active. (The threads that called the debugger will not execute.) Connection remains valid. Client must restop the world before any subsequent examination of threads. allows remote world to continue execution. (The threads that called the debugger will not execute.) Connection remains valid. Client must restop the world before any subsequent examination of threads. Stack examination Each thread has an internal frame pointer that selects one frame in the thread. All of these procedures require that the world be stopped. Returns a "dummy" stack. This may be used for the interpretation of some text lines. Resets the thread index for detailed examination. We refer to this thread as the "currentThread" in the following procedures. Returns a stack for the current thread. Subsequent examination may procede using StackCirio. misc added for debugging Êå•NewlineDelimiter ™Icodešœ™šœ#™#K™:K™?K™+K™%K™,—K˜šÏk ˜ Kšœœœ˜Kšœœœ˜Kšœ˜—K˜K˜K˜šÏn œœ œ˜!Kš˜K˜K™™Kšœ œœ˜&Jšœœ˜J˜—J˜J™J™ ™šžœœœ œœœœ œœœ ˜ŠJ™¸—J™šžœœ"œœ˜HJ™Š—J˜šžœœ"œœ˜BJ™–—J™šžœœ˜1J™?——J˜J™™J˜š žœœ"œœœ œ˜ZJ™—J˜™6J˜šœœœ˜šœ ˜J˜ J˜J˜ Jšœœ˜Jšœ˜ ———J™šžœœ<œœœœœÏcœœ˜ŒJšœ‡œœFœy™ÒJ™—Jš žœœ&œœœ˜WJ˜Jšžœœœœœ œœœ˜]J˜Jšžœœœœœœœœ˜]J˜Jš žœœ&œœœœ˜tJ˜Jšžœœ&œ œœœœ˜qJ˜Jšž œœ&œ œœœœ˜xJ˜Jšž œœ&œ œœœœ˜wJ˜Jšž œœ&œ œœœœ˜yJ˜Jšž œœ&œ œœœœ˜zJ˜šžœœ&œ œœœ œ˜nJšœ"œÇ™ì—J˜šžœœ˜;J™ý—J˜šžœœ˜0J™ËJ™—J˜J˜—J˜J™™J™J™‹J˜J˜š ž œœ!œœœ˜YJ™U—J˜šž œœ&œ œœœœ˜vJ™~—J˜š žœœ"œœœ˜dJ™]—J˜—J˜™J˜Kš žœœ.œ œœ˜`J˜Jš žœœ.œ œœ˜cJ˜Jšžœœ#œœ˜GJ˜Kšžœœ#œœ˜HJ˜J™J˜Jšžœœ#œœ˜KJ˜Jšžœœ#œœ˜HJ˜—Kšœ˜——…— t