\doxysection{Qore\+::Debug\+Program Class Reference}
\hypertarget{class_qore_1_1_debug_program}{}\label{class_qore_1_1_debug_program}\index{Qore::DebugProgram@{Qore::DebugProgram}}


\doxylink{class_qore_1_1_debug_program}{Debug\+Program} class supports Qore \doxylink{class_qore_1_1_program}{Program} debugging via \doxylink{class_qore_1_1_program_control}{Program\+Control}.  




{\ttfamily \#include $<$QC\+\_\+\+Debug\+Program.\+dox.\+h$>$}

\doxysubsubsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\Hypertarget{class_qore_1_1_debug_program_af00ca169aed35d3533833ed6c9537875}\label{class_qore_1_1_debug_program_af00ca169aed35d3533833ed6c9537875} 
\mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{nothing}} {\bfseries add\+Program} (\mbox{\hyperlink{class_qore_1_1_program_control}{Program\+Control}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{pgm}})
\begin{DoxyCompactList}\small\item\em Add program to debugging. \end{DoxyCompactList}\item 
\Hypertarget{class_qore_1_1_debug_program_a319ccf1772a73f344c279e3b74942664}\label{class_qore_1_1_debug_program_a319ccf1772a73f344c279e3b74942664} 
\mbox{\hyperlink{group__type__conversion__functions_ga2de8717e92c5f97ccc6511f6062d6502}{int}} {\bfseries break\+Program} (\mbox{\hyperlink{class_qore_1_1_program_control}{Program\+Control}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{pgm}})
\begin{DoxyCompactList}\small\item\em Break program, i.\+e. all threads. \end{DoxyCompactList}\item 
\Hypertarget{class_qore_1_1_debug_program_a037e76587a1731677fb4ce7843a45bc3}\label{class_qore_1_1_debug_program_a037e76587a1731677fb4ce7843a45bc3} 
\mbox{\hyperlink{group__type__conversion__functions_ga2de8717e92c5f97ccc6511f6062d6502}{int}} {\bfseries break\+Program\+Thread} (\mbox{\hyperlink{class_qore_1_1_program_control}{Program\+Control}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{pgm}}, \mbox{\hyperlink{group__type__conversion__functions_ga2de8717e92c5f97ccc6511f6062d6502}{int}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{tid}})
\begin{DoxyCompactList}\small\item\em Break particular program thread. \end{DoxyCompactList}\item 
\Hypertarget{class_qore_1_1_debug_program_ada3f690b4f9391243747c16b2b925afe}\label{class_qore_1_1_debug_program_ada3f690b4f9391243747c16b2b925afe} 
{\bfseries constructor} ()
\begin{DoxyCompactList}\small\item\em Creates the debug program object with notification functions without any functionality. \end{DoxyCompactList}\item 
\mbox{\hyperlink{class_qore_1_1_debug_program_ae182473540521dcf74c683c5f707bb27}{copy}} ()
\begin{DoxyCompactList}\small\item\em Throws an exception to prevent objects of this class from being copied. \end{DoxyCompactList}\item 
\Hypertarget{class_qore_1_1_debug_program_aad949c4e00b880498aefe943ea7a92fd}\label{class_qore_1_1_debug_program_aad949c4e00b880498aefe943ea7a92fd} 
{\bfseries destructor} ()
\begin{DoxyCompactList}\small\item\em Waits for all threads to finish executing, then deletes all global variables, dereferences the internal \doxylink{class_qore_1_1_program}{Program} object and deletes the Qore object. \end{DoxyCompactList}\item 
\Hypertarget{class_qore_1_1_debug_program_a77b60d4fa6f273ac76ddd8810098de1f}\label{class_qore_1_1_debug_program_a77b60d4fa6f273ac76ddd8810098de1f} 
\mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{list}} {\bfseries get\+All\+Programs} ()
\begin{DoxyCompactList}\small\item\em Get all programs being debugged. \end{DoxyCompactList}\item 
\Hypertarget{class_qore_1_1_debug_program_aeaa0b63e2fcf2d43f0810fd1ad013bb3}\label{class_qore_1_1_debug_program_aeaa0b63e2fcf2d43f0810fd1ad013bb3} 
\mbox{\hyperlink{group__type__conversion__functions_ga2de8717e92c5f97ccc6511f6062d6502}{int}} {\bfseries get\+Interrupted\+Count} ()
\begin{DoxyCompactList}\small\item\em Get number of interrupted threads. \end{DoxyCompactList}\item 
\Hypertarget{class_qore_1_1_debug_program_af6128c85bed20aa75ff620395d3e650e}\label{class_qore_1_1_debug_program_af6128c85bed20aa75ff620395d3e650e} 
\mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{abstract}} {\bfseries on\+Attach} (\mbox{\hyperlink{class_qore_1_1_program_control}{Program\+Control}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{pgm}}, \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{rs}}, \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{rtsid}})
\begin{DoxyCompactList}\small\item\em Executed when new thread is attached to program being debugged. \end{DoxyCompactList}\item 
\Hypertarget{class_qore_1_1_debug_program_a9a4109f8e3f5571e45b1a398ffe3944a}\label{class_qore_1_1_debug_program_a9a4109f8e3f5571e45b1a398ffe3944a} 
\mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{abstract}} {\bfseries on\+Detach} (\mbox{\hyperlink{class_qore_1_1_program_control}{Program\+Control}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{pgm}}, \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{rs}}, \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{rtsid}})
\begin{DoxyCompactList}\small\item\em Executed when thread is datached from program being debugged. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{abstract}} \mbox{\hyperlink{class_qore_1_1_debug_program_a7875283d2d77e2f046f668ae1dbe1481}{on\+Exception}} (\mbox{\hyperlink{class_qore_1_1_program_control}{Program\+Control}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{pgm}}, \mbox{\hyperlink{group__type__conversion__functions_ga2de8717e92c5f97ccc6511f6062d6502}{int}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{statement}}, \mbox{\hyperlink{group__type__conversion__functions_ga24ee71727f0785d3b826833ed6f5e2ee}{hash}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{ex}}, \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{dismiss}}, \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{rs}}, \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{rtsid}})
\begin{DoxyCompactList}\small\item\em Executed when an exception is raised. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{abstract}} \mbox{\hyperlink{class_qore_1_1_debug_program_aff4d8aa1dbc409efbe427cc497e6d6b9}{on\+Exit}} (\mbox{\hyperlink{class_qore_1_1_program_control}{Program\+Control}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{pgm}}, \mbox{\hyperlink{group__type__conversion__functions_ga2de8717e92c5f97ccc6511f6062d6502}{int}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{statement}}, \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{return\+Value}}, \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{rs}}, \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{rtsid}})
\begin{DoxyCompactList}\small\item\em Executed when a program/thread is exited. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{abstract}} \mbox{\hyperlink{class_qore_1_1_debug_program_a141bcffa9c0c190e1e7cfc0e6a7abc89}{on\+Function\+Enter}} (\mbox{\hyperlink{class_qore_1_1_program_control}{Program\+Control}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{pgm}}, \mbox{\hyperlink{group__type__conversion__functions_ga2de8717e92c5f97ccc6511f6062d6502}{int}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{statement}}, \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{rs}}, \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{rtsid}})
\begin{DoxyCompactList}\small\item\em Executed when a function is entered. \end{DoxyCompactList}\item 
\mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{abstract}} \mbox{\hyperlink{class_qore_1_1_debug_program_a4312a29a6f9fc51f6a25a1c9441d2444}{on\+Function\+Exit}} (\mbox{\hyperlink{class_qore_1_1_program_control}{Program\+Control}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{pgm}}, \mbox{\hyperlink{group__type__conversion__functions_ga2de8717e92c5f97ccc6511f6062d6502}{int}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{statement}}, \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{return\+Value}}, \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{rs}}, \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{rtsid}})
\begin{DoxyCompactList}\small\item\em Executed when a function is exited. \end{DoxyCompactList}\item 
\Hypertarget{class_qore_1_1_debug_program_ad8cd7b6c9842b2f05888713d1deaf9c7}\label{class_qore_1_1_debug_program_ad8cd7b6c9842b2f05888713d1deaf9c7} 
\mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{abstract}} {\bfseries on\+Step} (\mbox{\hyperlink{class_qore_1_1_program_control}{Program\+Control}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{pgm}}, \mbox{\hyperlink{group__type__conversion__functions_ga2de8717e92c5f97ccc6511f6062d6502}{int}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{block\+Statement}}, \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{\+\_\+\+\_\+7\+\_\+}} \mbox{\hyperlink{group__type__conversion__functions_ga2de8717e92c5f97ccc6511f6062d6502}{int}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{statement}}, \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{\+\_\+\+\_\+7\+\_\+}} \mbox{\hyperlink{group__type__conversion__functions_ga2de8717e92c5f97ccc6511f6062d6502}{int}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{breakpoint\+Id}}, \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{flow}}, \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{rs}}, \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{rtsid}})
\begin{DoxyCompactList}\small\item\em Executed when step is performed. \end{DoxyCompactList}\item 
\Hypertarget{class_qore_1_1_debug_program_a3248a531df6eedc2ccbb921a968005dd}\label{class_qore_1_1_debug_program_a3248a531df6eedc2ccbb921a968005dd} 
\mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{nothing}} {\bfseries remove\+Program} (\mbox{\hyperlink{class_qore_1_1_program_control}{Program\+Control}} \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{pgm}})
\begin{DoxyCompactList}\small\item\em Remove program from debugging. \end{DoxyCompactList}\item 
\Hypertarget{class_qore_1_1_debug_program_aa2d8b9749741cfcc6f972a627d75cbd1}\label{class_qore_1_1_debug_program_aa2d8b9749741cfcc6f972a627d75cbd1} 
\mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{nothing}} {\bfseries wait\+For\+Termination\+And\+Clear} ()
\begin{DoxyCompactList}\small\item\em Clear all programs and wait for all threads to finish executing callbacks. \end{DoxyCompactList}\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
\doxylink{class_qore_1_1_debug_program}{Debug\+Program} class supports Qore \doxylink{class_qore_1_1_program}{Program} debugging via \doxylink{class_qore_1_1_program_control}{Program\+Control}. 

One instance may be assigned to one or more \doxylink{class_qore_1_1_program_control}{Program\+Control} instances which may run in one or more threads. \doxylink{class_qore_1_1_program_control}{Program\+Control} is added to the debugging list, next the program being debugged notifies the debugger when the next execution event occurs. Calling of notification method is always performed in the program thread. When the program flow is to be interrupted then it happens in the notification method of this class. Then debugger decides to continue and then returns from the notification function and passes \doxylink{group__debug__rs__options}{Debug Run State Constants} value "{}step option"{} code back.

The debugger should probably handle control in separate thread.

The \doxylink{class_qore_1_1_debug_program}{Debug\+Program} class defines the interface and the real functionality should be implemented in a child class.

\begin{DoxyParagraph}{Restrictions\+:}
MUST HAVE\+: \doxylink{group__parse__options_gad0d38cd46f08bf4210d4010204269cc9}{Qore\+::\+PO\+\_\+\+ALLOW\+\_\+\+DEBUGGER}
\end{DoxyParagraph}
\begin{DoxyParagraph}{Example\+:}

\begin{DoxyCode}{0}
\DoxyCodeLine{const\ code\ =\ \textcolor{stringliteral}{"{}for\ (int\ i=0;\ i<10;\ i++)\ \{\}"{}};}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{class\ }MyDebugProgram\ dbg()\ inherits\ DebugProgram\ \{}
\DoxyCodeLine{private:}
\DoxyCodeLine{\ \ \ onAttach(ProgramControl\ pgm,\ reference\ rs)\ \{}
\DoxyCodeLine{\ \ \ \ \ \ rs\ =\ DebugStep;}
\DoxyCodeLine{\ \ \ \}}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{ProgramControl\ p\ =\ ProgramControl::getProgram();}
\DoxyCodeLine{dbg.addProgram(p);}
\DoxyCodeLine{}
\DoxyCodeLine{pgm.parse(code);}
\DoxyCodeLine{pgm.saveProgram();}
\DoxyCodeLine{pgm.run();}

\end{DoxyCode}

\end{DoxyParagraph}
\begin{DoxySince}{Since}
Qore 0.\+8.\+13 
\end{DoxySince}


\doxysubsection{Member Function Documentation}
\Hypertarget{class_qore_1_1_debug_program_ae182473540521dcf74c683c5f707bb27}\label{class_qore_1_1_debug_program_ae182473540521dcf74c683c5f707bb27} 
\index{Qore::DebugProgram@{Qore::DebugProgram}!copy@{copy}}
\index{copy@{copy}!Qore::DebugProgram@{Qore::DebugProgram}}
\doxysubsubsection{\texorpdfstring{copy()}{copy()}}
{\footnotesize\ttfamily Qore\+::\+Debug\+Program\+::copy (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}



Throws an exception to prevent objects of this class from being copied. 


\begin{DoxyExceptions}{Exceptions}
{\em DEBUGPROGRAM-\/\+COPY-\/\+ERROR} & copying \doxylink{class_qore_1_1_debug_program}{Debug\+Program} objects is unsupported \\
\hline
\end{DoxyExceptions}
\Hypertarget{class_qore_1_1_debug_program_a7875283d2d77e2f046f668ae1dbe1481}\label{class_qore_1_1_debug_program_a7875283d2d77e2f046f668ae1dbe1481} 
\index{Qore::DebugProgram@{Qore::DebugProgram}!onException@{onException}}
\index{onException@{onException}!Qore::DebugProgram@{Qore::DebugProgram}}
\doxysubsubsection{\texorpdfstring{onException()}{onException()}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{abstract}} Qore\+::\+Debug\+Program\+::on\+Exception (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{class_qore_1_1_program_control}{Program\+Control}}}]{pgm,  }\item[{\mbox{\hyperlink{group__type__conversion__functions_ga2de8717e92c5f97ccc6511f6062d6502}{int}}}]{statement,  }\item[{\mbox{\hyperlink{group__type__conversion__functions_ga24ee71727f0785d3b826833ed6f5e2ee}{hash}}}]{ex,  }\item[{\mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}}}]{dismiss,  }\item[{\mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}}}]{rs,  }\item[{\mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}}}]{rtsid }\end{DoxyParamCaption})}



Executed when an exception is raised. 

\begin{DoxySeeAlso}{See also}
\doxylink{class_qore_1_1_program_control_ac95c2262d37003ea882ca5efa4f65224}{Program\+Control\+::get\+Statement\+Id\+Info} 
\end{DoxySeeAlso}
\Hypertarget{class_qore_1_1_debug_program_aff4d8aa1dbc409efbe427cc497e6d6b9}\label{class_qore_1_1_debug_program_aff4d8aa1dbc409efbe427cc497e6d6b9} 
\index{Qore::DebugProgram@{Qore::DebugProgram}!onExit@{onExit}}
\index{onExit@{onExit}!Qore::DebugProgram@{Qore::DebugProgram}}
\doxysubsubsection{\texorpdfstring{onExit()}{onExit()}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{abstract}} Qore\+::\+Debug\+Program\+::on\+Exit (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{class_qore_1_1_program_control}{Program\+Control}}}]{pgm,  }\item[{\mbox{\hyperlink{group__type__conversion__functions_ga2de8717e92c5f97ccc6511f6062d6502}{int}}}]{statement,  }\item[{\mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}}}]{return\+Value,  }\item[{\mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}}}]{rs,  }\item[{\mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}}}]{rtsid }\end{DoxyParamCaption})}



Executed when a program/thread is exited. 

\begin{DoxySeeAlso}{See also}
\doxylink{class_qore_1_1_program_control_ac95c2262d37003ea882ca5efa4f65224}{Program\+Control\+::get\+Statement\+Id\+Info} 
\end{DoxySeeAlso}
\Hypertarget{class_qore_1_1_debug_program_a141bcffa9c0c190e1e7cfc0e6a7abc89}\label{class_qore_1_1_debug_program_a141bcffa9c0c190e1e7cfc0e6a7abc89} 
\index{Qore::DebugProgram@{Qore::DebugProgram}!onFunctionEnter@{onFunctionEnter}}
\index{onFunctionEnter@{onFunctionEnter}!Qore::DebugProgram@{Qore::DebugProgram}}
\doxysubsubsection{\texorpdfstring{onFunctionEnter()}{onFunctionEnter()}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{abstract}} Qore\+::\+Debug\+Program\+::on\+Function\+Enter (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{class_qore_1_1_program_control}{Program\+Control}}}]{pgm,  }\item[{\mbox{\hyperlink{group__type__conversion__functions_ga2de8717e92c5f97ccc6511f6062d6502}{int}}}]{statement,  }\item[{\mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}}}]{rs,  }\item[{\mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}}}]{rtsid }\end{DoxyParamCaption})}



Executed when a function is entered. 

\begin{DoxySeeAlso}{See also}
\doxylink{class_qore_1_1_program_control_ac95c2262d37003ea882ca5efa4f65224}{Program\+Control\+::get\+Statement\+Id\+Info} 
\end{DoxySeeAlso}
\Hypertarget{class_qore_1_1_debug_program_a4312a29a6f9fc51f6a25a1c9441d2444}\label{class_qore_1_1_debug_program_a4312a29a6f9fc51f6a25a1c9441d2444} 
\index{Qore::DebugProgram@{Qore::DebugProgram}!onFunctionExit@{onFunctionExit}}
\index{onFunctionExit@{onFunctionExit}!Qore::DebugProgram@{Qore::DebugProgram}}
\doxysubsubsection{\texorpdfstring{onFunctionExit()}{onFunctionExit()}}
{\footnotesize\ttfamily \mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{abstract}} Qore\+::\+Debug\+Program\+::on\+Function\+Exit (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{class_qore_1_1_program_control}{Program\+Control}}}]{pgm,  }\item[{\mbox{\hyperlink{group__type__conversion__functions_ga2de8717e92c5f97ccc6511f6062d6502}{int}}}]{statement,  }\item[{\mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}}}]{return\+Value,  }\item[{\mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}}}]{rs,  }\item[{\mbox{\hyperlink{group__type__conversion__functions_ga9a401e5112c58f63c05e7ee1e15968ef}{reference}}}]{rtsid }\end{DoxyParamCaption})}



Executed when a function is exited. 

\begin{DoxySeeAlso}{See also}
\doxylink{class_qore_1_1_program_control_ac95c2262d37003ea882ca5efa4f65224}{Program\+Control\+::get\+Statement\+Id\+Info} 
\end{DoxySeeAlso}
