<questionid="arch-what"> Whatisthisprojectgoodfor? <hint> Pleaseprovideherefewlinesdescribingthetheproject, whatproblemitshouldsolve,providelinkstodocumentation, specifications,etc. </hint> </question>
-->
<answer id="arch-what">
The debuggercore/api module (Debugger Core API) allows to install different debugger implementation to one IDE.
It allows to share some common UI components.
</answer>
<!-- <questionid="arch-overall"when="init"> Describetheoverallarchitecture. <hint> WhatwillbeAPIfor <ahref="http://openide.netbeans.org/tutorial/api-design.html#design.apiandspi"> clientsandwhatsupportAPI</a>? Whatpartswillbepluggable? Howwillplug-insberegistered?Pleaseuse<code><apitype="export"/></code> todescribeyourgeneralAPIs. Ifpossiblepleaseprovide simplediagrams. </hint> </question>
-->
<answer id="arch-overall">
The Debugger Core API module defines common structures for integration of debugger implementations into NetBeans IDE.
<br/>List of APIs:
<ul>
<li><api name="DebuggerCoreAPI"type="export" category="official"url="@org-netbeans-api-debugger@" group="java"/> Debugger Core APIs</li>
<li><api name="DebuggerCoreSPI"type="import" category="official"url="@org-netbeans-api-debugger@" group="java"/> Debugger Core SPIs</li>
<li><api name="Meta-inf-debugger-org.netbeans.api.debugger.Properties-Reader" group="lookup"type="import" category="official"url="@org-netbeans-api-debugger@"/> Loads all property readers from given folder.</li>
<li><api name="Meta-inf-debugger-DebuggerInfo-ID-org.netbeans.spi.debugger.SessionProvider" group="lookup"type="import" category="official"url="@org-netbeans-api-debugger@"/> Loads all session providers for specific DebuggerInfo.</li>
<li><api name="Meta-inf-debugger-DebuggerInfo-ID-org.netbeans.spi.debugger.DelegatingSessionProvider" group="lookup"type="import" category="official"url="@org-netbeans-api-debugger@"/> Loads all delegating session providers for specific DebuggerInfo.</li>
<li><api name="Meta-inf-debugger-DebuggerInfo-ID-org.netbeans.spi.debugger.DebuggerEngineProvider" group="lookup"type="import" category="private"url="@org-netbeans-api-debugger@"/> Loads all debugger engine providers for specific DebuggerInfo.</li>
<li><api name="Meta-inf-debugger-DebuggerInfo-ID-org.netbeans.spi.debugger.DelegatingDebuggerEngineProvider" group="lookup"type="import" category="private"url="@org-netbeans-api-debugger@"/> Loads all delegating debugger engine providers for specific DebuggerInfo.</li>
<li><api name="Meta-inf-debugger-Session-ID-org.netbeans.spi.debugger.DebuggerEngineProvider" group="lookup"type="import" category="official"url="@org-netbeans-api-debugger@"/> Loads all debugger engine providers for specific Session.</li>
<li><api name="Meta-inf-debugger-Session-ID-org.netbeans.spi.debugger.DelegatingDebuggerEngineProvider" group="lookup"type="import" category="official"url="@org-netbeans-api-debugger@"/> Loads all delegating debugger engine providers for specific Session.</li>
<li><api name="Meta-inf-debugger-org.netbeans.api.debugger.LazyDebuggerManagerListener" group="lookup"type="import" category="official"url="@org-netbeans-api-debugger@"/> Loads all debbugger manager listeners and adds them to DebuggerManager.getDebuggerManager () instance.</li>
<li><api name="Meta-inf-debugger-org.netbeans.spi.debugger.ActionsProvider" group="lookup"type="import" category="official"url="@org-netbeans-api-debugger@"/> Loads all action providers for DebuggerManager context.</li>
<li><api name="Meta-inf-debugger-DebuggerEngine-ID-org.netbeans.spi.debugger.ActionsProvider" group="lookup"type="import" category="official"url="@org-netbeans-api-debugger@"/> Loads all action providers for DebuggerEngine (language) context.</li>
<li><api name="Meta-inf-debugger-Session-ID-org.netbeans.spi.debugger.ActionsProvider" group="lookup"type="import" category="official"url="@org-netbeans-api-debugger@"/> Loads all action providers for Session context.</li>
<li><api name="Meta-inf-debugger-DebuggerInfo-ID-org.netbeans.spi.debugger.ActionsProvider" group="lookup"type="import" category="private"url="@org-netbeans-api-debugger@"/> Loads all action providers for DebuggerInfo context.</li>
</ul>
Registrations in standard Lookup:
<ul>
<li><api name="org.netbeans.spi.debugger.ContextAwareService" group="lookup"type="import" category="official"url="@org-netbeans-api-debugger@"/> Loads all registered context-aware services from given folder.</li>
<li><api name="org.netbeans.spi.debugger.SessionProvider.ContextAware.createService"group="lookup"type="import" category="official"url="@org-netbeans-api-debugger@"/> Loads all session providers for specific DebuggerInfo.</li>
<li><api name="org.netbeans.spi.debugger.DebuggerEngineProvider.ContextAware.createService" group="lookup"type="import" category="official"url="@org-netbeans-api-debugger@"/> Loads all debugger engine providers for specific DebuggerInfo or Session.</li>
<li><api name="org.netbeans.api.debugger.LazyDebuggerManagerListener.ContextAware.createService" group="lookup"type="import" category="official"url="@org-netbeans-api-debugger@"/> Loads all debbugger manager listeners and adds them to DebuggerManager.getDebuggerManager () instance.</li>
<li><api name="org.netbeans.spi.debugger.ActionsProvider.ContextAware.createService"group="lookup"type="import" category="official"url="@org-netbeans-api-debugger@"/> Loads all action providers for context determined by it's path.</li>
<li><api name="netbeans.debugger.registration" group="property"type="import" category="private"/> Writes registration log to console.</li>
</ul>
<h2>UseCase I. - Install
and use CPP debugger plug-in to NetBeans + Java Debugger.</h2>
<span style="font-style: italic;">CPP debugger plug-in installs support
for debugging of some new language to the NetBeans IDE, and some new
debugging engine. This implementation of debugger should share UI
components (actions, Debugger Views, ...) with default NB Java
Debugger. It should share basic debugger model too - notion of current
context, current session, thread, call stack line, ...</span><br/>
<br/>
CPP debugger plug-in installs:<br/>
<ul>
<li>New set of breakpoint types - CPPLineBreakpointType,
CPPMethodBreakpointType...
<ul>
<li>This set of breakpoint types will have special cathegory in Add
Breakpoint Dialog called "CPP". Each breakpoint type will install a new
JPanel to Add Breakpoint Dialog.</li>
<li>ToggleBreakpointAction on CPP files will create / remove a
instance of CPPLineBreakpointType.</li>
</ul>
</li>
<li>Install some watches evaluator for CPP language.</li>
<li>Some new View to Debugger Window</li>
<li>Use Termilnal Emulator in Output Window as command line interface
to CPP debugger plug-in.</li>
<li>Install / uninstall a columns to / from standard Debugger Window
Views.</li>
<li>Redefine Nodes used for representation of CPP threads, watches,
variables, callstacks, sessions and breakpoints
<ul>
<li>Add / remove some properties<br/>
</li>
<li>Add / remove some actions</li>
<li>change icons</li>
<li>change display names</li>
</ul>
</li>
<li>Register CPP Actions for:
<ul>
<li>Step Into, Over, Out, Continue, Pause, Start, Kill, Restart,
Finish</li>
</ul>
</li>
<li>Some new CPP specific actions.</li>
</ul>
<br/>
<h2>UseCase II. -
Install and use JSP debugger plug-in to NetBeans + Java Debugger.</h2>
<span style="font-style: italic;">JSP debugger plug-in installs support
for debugging of some new language to the NetBeans Java Debugger. It
does not contain a new debugger engine, but it delegates to standard NB
Java debugger. So it does not depends on Debugger Core API only, but it
depends on JavaDebugger API too.<br/>
<br/>
JSP debugger plug-in installs:<br/>
</span>
<ul>
<li>New set of breakpoint types - JSPLineBreakpointType, ...
<ul>
<li>This set of breakpoint types will have special cathegory in Add
Breakpoint Dialog called "JSP". Each breakpoint type will install a new
JPanel to Add Breakpoint Dialog.</li>
<li>ToggleBreakpointAction on JSP files will create / remove a
instance of JSPLineBreakpointType.</li>
<li>JSPLineBreakpointType delegates all functionality to
JPDAClassBreakpoint and JPDALineBreakpoint<br/>
</li>
</ul>
</li>
<li>Some watches evaluator for JSP language expression. This
evaluator delegates evaluation of Java expressions to standard
JavaExpressionEvaluator.<br/>
</li>
<li>Redefine Nodes used for representation of JSP callstacks and
breakpoints
<ul>
<li>Add / remove some properties<br/>
</li>
<li>Add / remove some actions</li>
<li>change icons</li>
<li>change display names</li>
</ul>
</li>
<li>Register JSP Actions for:
<ul>
<li>Step Into, Over, Out</li>
<li>Implementation of this actions delegates to standard Java Step
actions - it redefines Java stepping functionality.</li>
</ul>
</li>
<li>JSP debugger plug in adds support for new programming language
(JSP) to already running Java Session.<br/>
</li>
</ul>
<br/>
<h2>UseCase III. -
Install and use J2EE debugger plug-in to NetBeans + Java Debugger.</h2>
<span style="font-style: italic;">J2EE debugger plug-in installs some
enhancements to the standard Java Debugger. It
does not contain a new debugger engine or language support. So it does
not depends on Debugger Core API only, but it
depends on JavaDebugger API too.<br/>
<br/>
J2EE debugger plug-in installs:<br/>
</span>
<ul>
<li>New set of breakpoint types</li>
<li>Filter for Threads and Callstack Views. This filter should allow
to:<br/>
<ul>
<li>Add / remove / modify nodes in this views.</li>
</ul>
</li>
<li>Redefine Stepping (Smart Stepping) behaviour of default Java
Debugger.</li>
<li>Some new View to Debugger Window</li>
</ul>
<br/>
<h2>UseCase IV. -
Install and use DBX debugger plug-in to NetBeans.</h2>
<span style="font-style: italic;">DBX debugger plug-in installs support
for debugging of some new language (CPP) to the NetBeans IDE, and some
new
debugging engine. But it contains debugger engine for Java debugging
too. DBX debugger engine has its own session management (or will have
in the next versions). One debugger engine can manage more than one
sessions. One engine supports debugging in more than one language.<br/>
<br/>
</span>
<h2>UseCase V. -
Implement Debugger Core UI module on top of Debugger Core API / SPI.</h2>
<span style="font-style: italic;">Debugger Core UI needs:<br/>
</span>
<ul>
<li>List all breakpoint types and all breakpoint cathegories.</li>
<li>Visually customize all breakpoints - some panel.</li>
<li>Add / remove breakpoints.</li>
<li>Add / remove watches.<br/>
</li>
<li>Represent breakpoints, threads, thread groups, watches, sessions,
call stack frames, locales, and fields as Nodes in NB Explorer View.</li>
<li>List all threads, thread groups, locales, watches, breakpoints,
callstack frames, and fields.</li>
<li>Listen on changes of hierarchy of threads, thread groups,
locales, watches, breakpoints, callstack frames, and fields.</li>
<li>Some current context definition. Current contet should define
current session, language, thread, and call stack line.</li>
</ul>
<br/>
<questionid="dep-non-nb"> Whatothernon-NetBeansprojectsthisonedependson? <hint> Somenon-NetBeansprojectsarepackagedasNetBeansmodules (see<ahref="http://libs.netbeans.org">libraries</a>)and itispreferedtousethisapproachwhenmoremodulesmay dependonsuchthird-partylibrary. </hint> </question>
-->
<answer id="dep-non-nb">
No other dependency.
</answer>
<!-- Question: dep-platform
<questionid="dep-platform"> Onwhichplatformsyourmodulerun?Any?Doesitruninthesame way? <hint> IfyourmoduleisusingJNIordealswithspecialdifferencesof OSeslikefilesystems,etc.pleasedescribeherewhattheyare. </hint> </question>
-->
<answer id="dep-platform">
The module is 100% pure Java and runs on any platform.
</answer>
<questionid="compat-standards"> Doesthemoduleimplementsordefinesanystandards?Isthe implementationexactoritdeviatessomehow? </question>
-->
<answer id="compat-standards">
None defined or implemented.
</answer>
<!-- Question: compat-version
<questionid="compat-version"> Doesyourmoduleproperlycoexistswithearlierandfuture versions?Canyoucorrectlyreadsettings?Willfuture versionsbeabletoreadsettings? <hint> Veryhelpfulforreadingsettingsistostoreversionnumber there,sofutureversionscandecidewhetherhowtoread/convert thesettingsandolderversionscanignorethenewones. </hint> </question>
-->
<answer id="compat-version">
Only one version of the module can be installed at a time.
The settings are shared across different versions, stored
and read by Java serialization and will be read in future as well.
</answer>
<questionid="lookup-lookup"> Doesyourmoduleuses<code>org.openide.util.Lookup</code> tofindanycomponentstocommunicateto?Whichones? <hint> Pleasedescribetheinterfacesyouaresearchingfor,where aredefined,whetheryouaresearchingforjustoneormoreofthem, iftheorderisimportant,etc.Alsoclasifythestabilityofsuch APIcontract. </hint> </question>
-->
<answer id="lookup-lookup">
Yes. We search for debugger services registered on module layers
(System FileSystem).
In addition to that we use our own private implementation of lookup pattern.
We are searching for instances of various servies defined in *.spi.* packages.
The contract is described in JavaDoc.
</answer>
<!-- Question: lookup-register
<questionid="lookup-register"> Doyouregisteranythingintothelookupforothertofind? <hint> Doyouregisterusinglayerfileorusing<code>META-INF/services</code>? Whoissupposedtofindyourcomponent? </hint> </question>
-->
<answer id="lookup-register">
We use services registered under <code>Debugger</code> folder in System FileSystem.
In addition to that we use our private namespace <code>META-INF/debugger</code>
for registration.
The contract is described in JavaDoc.
</answer>
<questionid="exec-reflection"> Doesyourcodeusesjava.lang.reflecttoexecutesomeothercode? <hint> ThisusuallyindicatesamissingorunsufficientAPIintheother partofthesystem.Iftheothersideisnotawareofyourdependency thiscontractcanbeeasilybroken. </hint> </question>
-->
<answer id="exec-reflection">
Yes. We search for services registered through standard Lookup under
<code>Debugger</code> folder or in our private namespace lookup
under <code>META-INF/debugger</code>. The contract is described in Javadoc.
In short: The registered file should contain a list of fully-qualified class
names, one per line, of classes implementing the service interface and having
default public constructor. It's also possible to append a name of
a static method followed by paranthesis, which returns the implementation
of the service. That method is then called instead of the default
constructor. The method can not take any arguments.
If there is a need to remove a service that is provided by some other
module, append <code>'-hidden'</code> after the class or method name. Space
and tab characters surrounding each name, as well as blank lines, are
ignored. The comment character is <code>'#'</code>
</answer>
<answer id="exec-introspection">
debuggercore/api does not use introspection.
The cases when an object is tested on various types are quite common, but not documented.
</answer>
<answer id="exec-threading">
We use standard Java features - synchronized blocks - to synchronize our code.
</answer>
<!-- format ********************************************************************** -->
<!-- Question: format-clipboard
<questionid="format-clipboard"> Whichprotocolsyourcodereads/insertswhencommunicatingwith clipboard? </question>
-->
<answer id="format-clipboard">
No communication with clipboard.
</answer>
<questionid="perf-limit"> Arethereanylimitsinnumber/sizeofelementsyourcode canhandle? </question>
-->
<answer id="perf-limit">
No explicit limits. Technically, the available memory size is the limit...
</answer>
<!-- Question: perf-spi <questionid="perf-spi"when="init"> Howtheperformanceofthepluggedincodewillbeenforced? <hint> Ifyouallowforeigncodetobepluggedintoyourownmodule,how doyouenforce,thatitwillbehavecorrectlyandfastandwillnot negativelyinfluencetheperformanceofyourownmodule? </hint> </question>
-->
<answer id="perf-spi">
We are not able to enforce performance of plugged in code.
</answer>
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.