From a127b88ecbfab58f64944c98aa47722a18e363b2 Mon Sep 17 00:00:00 2001 From: Zardshard <0azrune6@zard.anonaddy.com> Date: Tue, 30 May 2023 12:59:30 -0400 Subject: [PATCH] Debugger: Add UML class diagram The debugger.xmi file is the source file meant to be opened by Umbrello. The other files are generated. The docbook file is exported from Umbrello and the .rst file is converted from it using Pandoc, with minor manual fixes. Change-Id: Idc831d15c6121c21ebb170c245bc8ab97986702e Reviewed-on: https://review.haiku-os.org/c/haiku/+/6483 Reviewed-by: Adrien Destugues Tested-by: Commit checker robot --- docs/develop/index.rst | 1 + docs/develop/kits/debugger/class diagram.png | Bin 0 -> 51140 bytes docs/develop/kits/debugger/debugger.docbook | 663 +++++++++++++++++++ docs/develop/kits/debugger/debugger.xmi | 465 +++++++++++++ docs/develop/kits/debugger/index.rst | 266 ++++++++ 5 files changed, 1395 insertions(+) create mode 100644 docs/develop/kits/debugger/class diagram.png create mode 100644 docs/develop/kits/debugger/debugger.docbook create mode 100644 docs/develop/kits/debugger/debugger.xmi create mode 100644 docs/develop/kits/debugger/index.rst diff --git a/docs/develop/index.rst b/docs/develop/index.rst index f2c99bf4ea..011e9442e4 100644 --- a/docs/develop/index.rst +++ b/docs/develop/index.rst @@ -41,6 +41,7 @@ Table of contents /build/index /release/index /libroot/index + /kits/debugger/index /midi/index /net/index /packages/README diff --git a/docs/develop/kits/debugger/class diagram.png b/docs/develop/kits/debugger/class diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..6822455e142f0471843edb1249c6cbd1642b812a GIT binary patch literal 51140 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 mj^Qu^mA&@;1aG!~lcNpID + +
+ UML Model +
+ Actors +
+
+ Use Cases +
+
+ Interfaces +
+
+ Classes +
+ TargetHostInterface + + + <tgroup cols="3" align="left" colsep="1" rowsep="1"> + <colspec colname="c1"/> + <colspec colname="c2"/> + <colspec colname="c3"/> + <thead> + <row> + <entry role="class-title">Class</entry> + <entry role="class-name" namest="c2" nameend="c3">TargetHostInterface</entry> + </row> + </thead> + <tbody> + <row> + <entry role="comment" namest="c1" nameend="c3"> + <para>Keeps track of how many TeamDebuggers there are, starts new ones, finds existing ones, and removes old ones.</para> + </entry> + </row> + <row> + <entry namest="c1" nameend="c3"> + <para/> + </entry> + </row> + </tbody> + </tgroup> + </table> + </section> + <section> + <title>RemoteTargetHostInterface +
+ + <tgroup cols="3" align="left" colsep="1" rowsep="1"> + <colspec colname="c1"/> + <colspec colname="c2"/> + <colspec colname="c3"/> + <thead> + <row> + <entry role="class-title">Class</entry> + <entry role="class-name" namest="c2" nameend="c3">RemoteTargetHostInterface</entry> + </row> + </thead> + <tbody> + <row> + <entry role="comment" namest="c1" nameend="c3"> + <para>Operates on remote computers. Not implemented.</para> + </entry> + </row> + <row> + <entry namest="c1" nameend="c3"> + <para/> + </entry> + </row> + <section> + <title>Supertypes: + + + +
+
+
+ LocalTargetHostInterface + + + <tgroup cols="3" align="left" colsep="1" rowsep="1"> + <colspec colname="c1"/> + <colspec colname="c2"/> + <colspec colname="c3"/> + <thead> + <row> + <entry role="class-title">Class</entry> + <entry role="class-name" namest="c2" nameend="c3">LocalTargetHostInterface</entry> + </row> + </thead> + <tbody> + <row> + <entry role="comment" namest="c1" nameend="c3"> + <para>Operates on the local computer. Creates teams, attaches to existing teams, and finds teams by threads. + +It is responsible for keeping its instance of TargetHost up-to-date.</para> + </entry> + </row> + <section> + <title>Supertypes: + + + + Operations: + + + + + visibility + + + return + + + name + + + + + + void + + GetTargetHost + + + + + + + +
+
+
+ TargetHost + + + <tgroup cols="3" align="left" colsep="1" rowsep="1"> + <colspec colname="c1"/> + <colspec colname="c2"/> + <colspec colname="c3"/> + <thead> + <row> + <entry role="class-title">Class</entry> + <entry role="class-name" namest="c2" nameend="c3">TargetHost</entry> + </row> + </thead> + <tbody> + <row> + <entry role="comment" namest="c1" nameend="c3"> + <para>Stores wich teams are on the target host.</para> + </entry> + </row> + <row> + <entry namest="c1" nameend="c3"> + <para/> + </entry> + </row> + </tbody> + </tgroup> + </table> + </section> + <section> + <title>TeamDebugger +
+ + <tgroup cols="3" align="left" colsep="1" rowsep="1"> + <colspec colname="c1"/> + <colspec colname="c2"/> + <colspec colname="c3"/> + <thead> + <row> + <entry role="class-title">Class</entry> + <entry role="class-name" namest="c2" nameend="c3">TeamDebugger</entry> + </row> + </thead> + <tbody> + <row> + <entry role="comment" namest="c1" nameend="c3"> + <para>Acts as the backend for UserInterface. Receives the UserInterface's requests through the UserInterfaceListener.</para> + </entry> + </row> + <row> + <entry namest="c1" nameend="c3"> + <para/> + </entry> + </row> + <section><title>Supertypes:, + + +
+
+
+ UserInterfaceListener + + + <tgroup cols="3" align="left" colsep="1" rowsep="1"> + <colspec colname="c1"/> + <colspec colname="c2"/> + <colspec colname="c3"/> + <thead> + <row> + <entry role="class-title">Class</entry> + <entry role="class-name" namest="c2" nameend="c3">UserInterfaceListener</entry> + </row> + </thead> + <tbody> + <row> + <entry role="comment" namest="c1" nameend="c3"> + <para>Class that receives requests from the UserInterface to set and clear breakpoints and watchpoints, read and write memory, write core files, step over and into functions, load images, evaluate expressions, and so on.</para> + </entry> + </row> + <row> + <entry namest="c1" nameend="c3"> + <para/> + </entry> + </row> + </tbody> + </tgroup> + </table> + </section> + <section> + <title>UserInterface +
+ + <tgroup cols="3" align="left" colsep="1" rowsep="1"> + <colspec colname="c1"/> + <colspec colname="c2"/> + <colspec colname="c3"/> + <thead> + <row> + <entry role="class-title">Class</entry> + <entry role="class-name" namest="c2" nameend="c3">UserInterface</entry> + </row> + </thead> + <tbody> + <row> + <entry role="comment" namest="c1" nameend="c3"> + <para>Similar to BApplication class. States the existence of Show, Terminate, Init, LoadSettings, SaveSettings, etc.</para> + </entry> + </row> + <row> + <entry namest="c1" nameend="c3"> + <para/> + </entry> + </row> + <section> + <title>Supertypes: + + + +
+
+
+ Debugger + + + <tgroup cols="3" align="left" colsep="1" rowsep="1"> + <colspec colname="c1"/> + <colspec colname="c2"/> + <colspec colname="c3"/> + <thead> + <row> + <entry role="class-title">Class</entry> + <entry role="class-name" namest="c2" nameend="c3">Debugger</entry> + </row> + </thead> + <tbody> + <row> + <entry role="comment" namest="c1" nameend="c3"> + <para>Main class of the Debugger GUI. Usually starts the TeamsDebugger window when run.</para> + </entry> + </row> + <row> + <entry namest="c1" nameend="c3"> + <para/> + </entry> + </row> + <section> + <title>Supertypes: + + + +
+
+
+ BApplication + + + <tgroup cols="3" align="left" colsep="1" rowsep="1"> + <colspec colname="c1"/> + <colspec colname="c2"/> + <colspec colname="c3"/> + <thead> + <row> + <entry role="class-title">Class</entry> + <entry role="class-name" namest="c2" nameend="c3">BApplication</entry> + </row> + </thead> + <tbody> + <row> + <entry namest="c1" nameend="c3"> + <para/> + </entry> + </row> + </tbody> + </tgroup> + </table> + </section> + <section> + <title>GraphicalUserInterface +
+ + <tgroup cols="3" align="left" colsep="1" rowsep="1"> + <colspec colname="c1"/> + <colspec colname="c2"/> + <colspec colname="c3"/> + <thead> + <row> + <entry role="class-title">Class</entry> + <entry role="class-name" namest="c2" nameend="c3">GraphicalUserInterface</entry> + </row> + </thead> + <tbody> + <row> + <entry role="comment" namest="c1" nameend="c3"> + <para>The GUI of a single debugger attached to a single process</para> + </entry> + </row> + <row> + <entry namest="c1" nameend="c3"> + <para/> + </entry> + </row> + <section> + <title>Supertypes: + + + +
+
+
+ TeamWindow + + + <tgroup cols="3" align="left" colsep="1" rowsep="1"> + <colspec colname="c1"/> + <colspec colname="c2"/> + <colspec colname="c3"/> + <thead> + <row> + <entry role="class-title">Class</entry> + <entry role="class-name" namest="c2" nameend="c3">TeamWindow</entry> + </row> + </thead> + <tbody> + <row> + <entry role="comment" namest="c1" nameend="c3"> + <para>The window shown when the debugger is attached to the process. Allows stepping through code, setting breakpoints, etc.</para> + </entry> + </row> + <row> + <entry namest="c1" nameend="c3"> + <para/> + </entry> + </row> + </tbody> + </tgroup> + </table> + </section> + <section> + <title>TeamsWindow +
+ + <tgroup cols="3" align="left" colsep="1" rowsep="1"> + <colspec colname="c1"/> + <colspec colname="c2"/> + <colspec colname="c3"/> + <thead> + <row> + <entry role="class-title">Class</entry> + <entry role="class-name" namest="c2" nameend="c3">TeamsWindow</entry> + </row> + </thead> + <tbody> + <row> + <entry role="comment" namest="c1" nameend="c3"> + <para>The list of applications shown when the debugger is first launched. The user can choose one from the list to attach to or start their own.</para> + </entry> + </row> + <row> + <entry namest="c1" nameend="c3"> + <para/> + </entry> + </row> + </tbody> + </tgroup> + </table> + </section> + <section> + <title>BFilePanel +
+ + <tgroup cols="3" align="left" colsep="1" rowsep="1"> + <colspec colname="c1"/> + <colspec colname="c2"/> + <colspec colname="c3"/> + <thead> + <row> + <entry role="class-title">Class</entry> + <entry role="class-name" namest="c2" nameend="c3">BFilePanel</entry> + </row> + </thead> + <tbody> + <row> + <entry namest="c1" nameend="c3"> + <para/> + </entry> + </row> + </tbody> + </tgroup> + </table> + </section> + <section> + <title>TargetHostInterfaceRoster +
+ + <tgroup cols="3" align="left" colsep="1" rowsep="1"> + <colspec colname="c1"/> + <colspec colname="c2"/> + <colspec colname="c3"/> + <thead> + <row> + <entry role="class-title">Class</entry> + <entry role="class-name" namest="c2" nameend="c3">TargetHostInterfaceRoster</entry> + </row> + </thead> + <tbody> + <row> + <entry role="comment" namest="c1" nameend="c3"> + <para>Keeps track of all the available debugging interfaces. Currently only holds the local debugging interface, I believe. It could in the future also hold remote debugging connections.</para> + </entry> + </row> + <row> + <entry namest="c1" nameend="c3"> + <para/> + </entry> + </row> + </tbody> + </tgroup> + </table> + </section> + <section> + <title>Team +
+ + <tgroup cols="3" align="left" colsep="1" rowsep="1"> + <colspec colname="c1"/> + <colspec colname="c2"/> + <colspec colname="c3"/> + <thead> + <row> + <entry role="class-title">Class</entry> + <entry role="class-name" namest="c2" nameend="c3">Team</entry> + </row> + </thead> + <tbody> + <row> + <entry role="comment" namest="c1" nameend="c3"> + <para>Stores information about the current team such as its threads, breakpoints, etc. It does not actually do anything: it simply stores information.</para> + </entry> + </row> + <row> + <entry namest="c1" nameend="c3"> + <para/> + </entry> + </row> + </tbody> + </tgroup> + </table> + </section> + <section> + <title>Thread +
+ + <tgroup cols="3" align="left" colsep="1" rowsep="1"> + <colspec colname="c1"/> + <colspec colname="c2"/> + <colspec colname="c3"/> + <thead> + <row> + <entry role="class-title">Class</entry> + <entry role="class-name" namest="c2" nameend="c3">Thread</entry> + </row> + </thead> + <tbody> + <row> + <entry namest="c1" nameend="c3"> + <para/> + </entry> + </row> + </tbody> + </tgroup> + </table> + </section> + <section> + <title>DebuggerInterface +
+ + <tgroup cols="3" align="left" colsep="1" rowsep="1"> + <colspec colname="c1"/> + <colspec colname="c2"/> + <colspec colname="c3"/> + <thead> + <row> + <entry role="class-title">Class</entry> + <entry role="class-name" namest="c2" nameend="c3">DebuggerInterface</entry> + </row> + </thead> + <tbody> + <row> + <entry role="comment" namest="c1" nameend="c3"> + <para>Communicates to the system to tell it what should be done. Can set breakpoints, watchpoints, single step and resume threads, read and write memory, and get information.</para> + </entry> + </row> + <row> + <entry namest="c1" nameend="c3"> + <para/> + </entry> + </row> + </tbody> + </tgroup> + </table> + </section> + <section> + <title>WatchpointManager +
+ + <tgroup cols="3" align="left" colsep="1" rowsep="1"> + <colspec colname="c1"/> + <colspec colname="c2"/> + <colspec colname="c3"/> + <thead> + <row> + <entry role="class-title">Class</entry> + <entry role="class-name" namest="c2" nameend="c3">WatchpointManager</entry> + </row> + </thead> + <tbody> + <row> + <entry namest="c1" nameend="c3"> + <para/> + </entry> + </row> + </tbody> + </tgroup> + </table> + </section> + <section> + <title>BreakpointManager +
+ + <tgroup cols="3" align="left" colsep="1" rowsep="1"> + <colspec colname="c1"/> + <colspec colname="c2"/> + <colspec colname="c3"/> + <thead> + <row> + <entry role="class-title">Class</entry> + <entry role="class-name" namest="c2" nameend="c3">BreakpointManager</entry> + </row> + </thead> + <tbody> + <row> + <entry namest="c1" nameend="c3"> + <para/> + </entry> + </row> + </tbody> + </tgroup> + </table> + </section> + <section> + <title>CommandLineUserInterface +
+ + <tgroup cols="3" align="left" colsep="1" rowsep="1"> + <colspec colname="c1"/> + <colspec colname="c2"/> + <colspec colname="c3"/> + <thead> + <row> + <entry role="class-title">Class</entry> + <entry role="class-name" namest="c2" nameend="c3">CommandLineUserInterface</entry> + </row> + </thead> + <tbody> + <row> + <entry role="comment" namest="c1" nameend="c3"> + <para>Controls the output to the terminal when the Debugger is launched with the -c option.</para> + </entry> + </row> + <row> + <entry namest="c1" nameend="c3"> + <para/> + </entry> + </row> + <section> + <title>Supertypes: + + + +
+
+
+ CliContext + + + <tgroup cols="3" align="left" colsep="1" rowsep="1"> + <colspec colname="c1"/> + <colspec colname="c2"/> + <colspec colname="c3"/> + <thead> + <row> + <entry role="class-title">Class</entry> + <entry role="class-name" namest="c2" nameend="c3">CliContext</entry> + </row> + </thead> + <tbody> + <row> + <entry role="comment" namest="c1" nameend="c3"> + <para>Holds information and functions that each of the commands might want to use.</para> + </entry> + </row> + <row> + <entry namest="c1" nameend="c3"> + <para/> + </entry> + </row> + </tbody> + </tgroup> + </table> + </section> + </section> + <section id="diagrams"> + <title>Diagrams + + +
+ class diagram + + + + + + +
+
+ Classes: + +
+ + + diff --git a/docs/develop/kits/debugger/debugger.xmi b/docs/develop/kits/debugger/debugger.xmi new file mode 100644 index 0000000000..69e67580c6 --- /dev/null +++ b/docs/develop/kits/debugger/debugger.xmi @@ -0,0 +1,465 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/develop/kits/debugger/index.rst b/docs/develop/kits/debugger/index.rst new file mode 100644 index 0000000000..1436be52fd --- /dev/null +++ b/docs/develop/kits/debugger/index.rst @@ -0,0 +1,266 @@ +The Debugger kit +################ + +Classes +======= + +TargetHostInterface +------------------- + ++----------------------------------------------------------------------+ +| Class | ++======================================================================+ +| Keeps track of how many TeamDebuggers there are, starts new ones, | +| finds existing ones, and removes old ones. | ++----------------------------------------------------------------------+ +| | ++----------------------------------------------------------------------+ + +RemoteTargetHostInterface +------------------------- + ++------------------------------------------------+ +| Class | ++================================================+ +| Operates on remote computers. Not implemented. | ++------------------------------------------------+ +| | ++------------------------------------------------+ + +LocalTargetHostInterface +------------------------ + ++-------------------------+-------------------------+---------------+ +| Class | L | | +| | ocalTargetHostInterface | | ++=========================+=========================+===============+ +| Operates on the local | | | +| computer. Creates | | | +| teams, attaches to | | | +| existing teams, and | | | +| finds teams by threads. | | | +| It is responsible for | | | +| keeping its instance of | | | +| TargetHost up-to-date. | | | ++-------------------------+-------------------------+---------------+ +| Operations: | | | ++-------------------------+-------------------------+---------------+ +| visibility | return | name | ++-------------------------+-------------------------+---------------+ +| | void | GetTargetHost | ++-------------------------+-------------------------+---------------+ +| | | | ++-------------------------+-------------------------+---------------+ + +TargetHost +---------- + ++-------------------------------------------+ +| Class | ++===========================================+ +| Stores wich teams are on the target host. | ++-------------------------------------------+ +| | ++-------------------------------------------+ + +TeamDebugger +------------ + ++----------------------------------------------------------------------+ +| Class | ++======================================================================+ +| Acts as the backend for UserInterface. Receives the UserInterface's | +| requests through the UserInterfaceListener. | ++----------------------------------------------------------------------+ +| | ++----------------------------------------------------------------------+ + +UserInterfaceListener +--------------------- + ++----------------------------------------------------------------------+ +| Class | ++======================================================================+ +| Class that receives requests from the UserInterface to set and clear | +| breakpoints and watchpoints, read and write memory, write core | +| files, step over and into functions, load images, evaluate | +| expressions, and so on. | ++----------------------------------------------------------------------+ +| | ++----------------------------------------------------------------------+ + +UserInterface +------------- + ++----------------------------------------------------------------------+ +| Class | ++======================================================================+ +| Similar to BApplication class. States the existence of Show, | +| Terminate, Init, LoadSettings, SaveSettings, etc. | ++----------------------------------------------------------------------+ +| | ++----------------------------------------------------------------------+ + +Debugger +-------- + ++----------------------------------------------------------------------+ +| Class | ++======================================================================+ +| Main class of the Debugger GUI. Usually starts the TeamsDebugger | +| window when run. | ++----------------------------------------------------------------------+ +| | ++----------------------------------------------------------------------+ + +BApplication +------------ + ++-------+ +| Class | ++=======+ +| | ++-------+ + +GraphicalUserInterface +---------------------- + ++-----------------------------------------------------------+ +| Class | ++===========================================================+ +| The GUI of a single debugger attached to a single process | ++-----------------------------------------------------------+ +| | ++-----------------------------------------------------------+ + +TeamWindow +---------- + ++----------------------------------------------------------------------+ +| Class | ++======================================================================+ +| The window shown when the debugger is attached to the process. | +| Allows stepping through code, setting breakpoints, etc. | ++----------------------------------------------------------------------+ +| | ++----------------------------------------------------------------------+ + +TeamsWindow +----------- + ++----------------------------------------------------------------------+ +| Class | ++======================================================================+ +| The list of applications shown when the debugger is first launched. | +| The user can choose one from the list to attach to or start their | +| own. | ++----------------------------------------------------------------------+ +| | ++----------------------------------------------------------------------+ + +BFilePanel +---------- + ++-------+ +| Class | ++=======+ +| | ++-------+ + +TargetHostInterfaceRoster +------------------------- + ++----------------------------------------------------------------------+ +| Class | ++======================================================================+ +| Keeps track of all the available debugging interfaces. Currently | +| only holds the local debugging interface, I believe. It could in the | +| future also hold remote debugging connections. | ++----------------------------------------------------------------------+ +| | ++----------------------------------------------------------------------+ + +Team +---- + ++----------------------------------------------------------------------+ +| Class | ++======================================================================+ +| Stores information about the current team such as its threads, | +| breakpoints, etc. It does not actually do anything: it simply stores | +| information. | ++----------------------------------------------------------------------+ +| | ++----------------------------------------------------------------------+ + +Thread +------ + ++-------+ +| Class | ++=======+ +| | ++-------+ + +DebuggerInterface +----------------- + ++----------------------------------------------------------------------+ +| Class | ++======================================================================+ +| Communicates to the system to tell it what should be done. Can set | +| breakpoints, watchpoints, single step and resume threads, read and | +| write memory, and get information. | ++----------------------------------------------------------------------+ +| | ++----------------------------------------------------------------------+ + +WatchpointManager +----------------- + ++-------+ +| Class | ++=======+ +| | ++-------+ + +BreakpointManager +----------------- + ++-------+ +| Class | ++=======+ +| | ++-------+ + +CommandLineUserInterface +------------------------ + ++----------------------------------------------------------------------+ +| Class | ++======================================================================+ +| Controls the output to the terminal when the Debugger is launched | +| with the -c option. | ++----------------------------------------------------------------------+ +| | ++----------------------------------------------------------------------+ + +CliContext +---------- + ++----------------------------------------------------------------------+ +| Class | ++======================================================================+ +| Holds information and functions that each of the commands might want | +| to use. | ++----------------------------------------------------------------------+ +| | ++----------------------------------------------------------------------+ + +Diagrams +======== + +Classes: +-------- + +.. image:: class\ diagram.png