CommandHandler will dequeue any events raised by the aggregate returned from execute , register them with the EventRegistry and commit the transaction through the TransactionManager. Alternatively, a domain service may be called from execute. In such cases, the service should use the EventRegistry to dequeue and register any events raised by the affected aggregate, and CommandHandler::execute should return null.
TransactionManager::commit should take care of any persistence concerns and call EventManager::flush. Similarly, TransactionManager::rollback should discard and changes and call EventManager::clear. Flushing the EventManager collects all events registered by the EventRegistry and dispatches them through the EventBus. Clearing the EventManager simply discards all events. The EventBus should dispatch the events to any subscribers subscribing to them. If any other aggregates need to react to changes made to the initial aggregate, subscribe to the relevant events through event subscribers: Multiple subscribers may subscribe to any single event.
It is not recommended that subscribers depend on the order in which they process events, nor that a subscriber should stop the propagation of an event. The subscribers shouldn't contain any domain logic, but should instead generally only dispatch new commands. Entities, Aggregates and Events Entities must implement the EventProvider interface, and they must raise a domain event for every change to their state. Releases 2 2.
Jul 27, Packages 0 No packages published. Contributors 2. You signed in with another tab or window. Reload to refresh your session. To detect and prevent technical issues, abusive and fraudulent uses of Our Website and Services. How we store and retain your information. All of your personal data collected by us is stored on our information systems, owned and operated by Enlab Software. And a part of it is stored in the cloud systems. We will retain your information for the purposes stated in this privacy policy, such as improving our service's functionality, strengthening security, and serving our internal analysis.
We also retain your data as long as necessary to comply with our legal obligations, resolve emerging disputes, and enforce our legal agreements and policies. How we protect your data. We do not sell or pass your personal data to a third party for the purposes of direct marketing without your permission.
While our team works hard to protect your information and ensure security, like setting up HTTPS and monitoring our systems frequently for any possible vulnerabilities and attacks. However, we cannot guarantee the absolute security of your data on the internet environment.
In case an unexpected data breach happens, we will have to disclose specific information to report to the legal enforcement authorities that we believe it is unlawful. Marketing: When you opt-in to our subscriber list or fill out the forms to download materials developed by Enlab Software, Our Company would like to send you information about our Products and Services that we think may be useful for you.
You could opt-out at any time you want. You have the right at any time to stop Our Company from contacting you for marketing purposes or giving your data to other members of Our Company.
If you are California residents and have set business relationships with us, we do not track your data over time, and we do not respond to browser do-not-track signals. Children's personal dataOur Website does not serve children under 16 years old and does not collect any personal data of children under Your rights over data.
We would like to make sure you are fully aware of all of your data protection rights. Every user is entitled to the following: The right to be informed: You have the right to be informed by Our Company about what kind of data we collect, how we process it, and use it for purposes.
The right to access: You have the right to request Our Company for copies of your personal data. The right to rectification: You have the right to request that Our Company correct any information you believe is inaccurate. You also have the right to request Our Company to complete the information you think is incomplete.
The right to erasure: You have the right to request that Our Company erase your personal data under certain conditions. The right to restrict processing: You have the right to request that Our Company restrict your personal data processing under certain conditions. The right to object to processing: You have the right to object to Our Company's processing of your personal data under certain conditions. The right to data portability: You have the right to request that Our Company transfer the data that we have collected to another organization, or directly to you, under certain conditions.
The right in relation to automated decision making and profiling. The right to non-discrimination: Our company is not allowed to discriminate against you. If you make a request, we have one month to respond to you. If you would like to exercise any of these rights, please contact us at our email info enlabsoftware.
Privacy policies of other websites. Our Company website may contain different links to other websites. However, Our Privacy Policy applies only to our Website. In case you click on links to other websites, any emerging privacy issues should be governed by the companies that own these links. Changes to our privacy policy. Our Company keeps the privacy policy under regular review and adaptation to changes in legislation, changes of applicable privacy standards, changes in our offer, or changes in the processing of personal data.
Any major changes will be notified via emails provided by you. How to contact us. If you have any questions about Our Company's privacy policy, the data we hold on you, or you would like to exercise one of your data protection rights, please do not hesitate to contact us.
Enlab Software Co. Email: info enlabsoftware. Voluntarily fill out the forms on our Website, services, products. Can we send you our next blog posts? Only the best stuffs. See Displaying Program Status , for details. Align on Grid Align all displays on the grid.
See Aligning Displays , for a discussion. Rotate Graph Rotate the graph by 90 degrees. See Rotating the Graph , for details. Layout Graph Layout the graph. See Layouting the Graph , for details. Refresh Update all values in the data window. See Refreshing the Data Window , for details. By default, this menu is disabled; it is enabled by specifically requesting it at DDD invocation via the --maintenance option; see Options. It is also enabled when DDD gets a fatal signal.
This is useful only if you are a DDD maintainer. You must try to get three stop signs in a row, while preventing DDD from doing so with its skulls.
Click on New Game to restart. This is the default setting, as the core dump may contain important information required for debugging DDD. Remove Menu Make this menu inaccessible again. Overview Explains the most important concepts of DDD help. On Item Lets you click on an item to get help on it. What Now? Gives a hint on what to do next. Tip of the Day Shows the current tip of the day.
Debugger Reference Shows the on-line documentation for the inferior debugger. About DDD Shows version and copyright information. If this setting interferes with your window manager, or if your window manager does not auto-raise windows, set this resource to off.
This is done to prevent two overlapping auto-raised windows from entering an auto-raise loop. This is conformant to the Motif style guide. This is conformant to the KDE style guide. This argument is specified in the argument field , labeled :. Basically, there are four ways to set arguments: You can key in the argument manually. You can paste the current selection into the argument field typically using mouse button 2. To clear old contents beforehand, click on the : label. You can select an item from the source and data windows.
This will automatically copy the item to the argument field. You can select a previously used argument from the drop-down menu at the right of the argument field. Using GDB and Perl, the argument field provides a completion mechanism. After having entered an argument, you can select one of the buttons on the right. Most of these buttons also have menus associated with them; this is indicated by a small arrow in the upper right corner.
Pressing and holding mouse button 1 on such a button will pop up a menu with further operations. These are the buttons of the tool bar. Note that not all buttons may be inactive, depending on the current state and the capabilities of the inferior debugger.
Break If there is no breakpoint at , then this button is labeled Break. Clicking on Break sets a breakpoint at the location. See Setting Breakpoints , for details. Clear If there already is a breakpoint at , then this button is labeled Clear.
Clicking on Clear clears deletes the breakpoint at the location. See Deleting Breakpoints , for details. Watch If is not being watched, then this button is labeled Watch. Clicking on Watch creates a watchpoint on the expression.
See Setting Watchpoints , for details. Unwatch If is being watched, then this button is labeled Unwatch. Clicking on Unwatch clears deletes the watchpoint on. See Deleting Watchpoints , for details. Plot Plot in a plot window. See Plotting Values , for details. See Showing and Hiding Details , for a discussion. Rotate Rotate the selected display s. See Rotating Displays , for details. Set Set change the value of. See Assignment , for details.
Undisp Undisplay delete the selected display s. See Deleting Displays , for details. Images This lets each tool bar button show an image illustrating the action. Captions This shows the action name below the image. The default is to have images as well as captions, but you can choose to have only images saving space or only captions. If you choose to have neither images nor captions, tool bar buttons are labeled like other buttons, as in DDD 2. Note that this implies that in the stacked window configuration, the common tool bar cannot be displayed; it is replaced by two separate tool bars, as in DDD 2.
If you enable Flat buttons default , the border of tool bar buttons will appear only if the mouse pointer is over them. This latest-and-greatest GUI invention can be disabled, such that the button border is always shown.
If you enable Color buttons, tool bar images will be colored when entered. If DDD was built using Motif 2. If neither captions nor images are enabled, tool bar buttons are shown using ordinary labels. See also buttonImages , below. See also buttonCaptions , above. If off , the 3-D border is shown all the time. It can be moved around on top of the DDD windows, but it can also be placed besides them. By default, the command tool sticks to the DDD source window: Whenever you move the DDD source window, the command tool follows such that the distance between source window and command tool remains the same.
By default, the command tool is also auto-raised , such that it stays on top of other DDD windows. Whenever you save DDD state, DDD also saves the distance between command tool and source window, such that you can select your own individual command tool placement. These are the buttons of the command tool.
Run Start program execution. When you click this button, your program will begin to execute immediately. Stepi Execute one machine instruction, then stop and return to DDD. Nexti Execute one machine instruction, but if it is a function call, proceed until the function returns. Cont Resume program execution, at the address where your program last stopped; any breakpoints set at that address are bypassed.
Edit Invoke an editor for the current source file. Make Run the make program with the most recently given arguments. Here's the related resource: commandToolBar class ToolBar Resource Whether the tool buttons should be shown in a tool bar above the source window on or within the command tool off , default.
Enabling the command tool bar disables the command tool and vice versa. If this setting interferes with your window manager, or if your window manager keeps the command tool on top anyway, set this resource to off. Whenever the source window is moved, the command tool is moved by the same offset such that its position relative to the source window remains unchanged.
If off , the command tool does not follow source window movements. Default is 8. If this is off , the command tool is created as a transient window. Several window managers keep transient windows automatically on top of their parents, which is appropriate for the command tool.
However, your window manager may be configured not to decorate transient windows, which means that you cannot easily move the command tool around. If this is on , DDD realizes the command tool as a top-level window. Such windows are always decorated by the window manager. However, top-level windows are not automatically kept on top of other windows, such that you may wish to set the autoRaiseTool resource, too.
If this is auto default , DDD checks whether the window manager decorates transients. If yes, the command tool is realized as a transient window as in the off setting ; if no, the command tool is realized as a top-level window as in the on setting. Hence, the command tool is always decorated using the "best" method, but the extra check takes some time.
Here's how to get help while working with DDD. You can get a short help text on most DDD buttons by simply moving the mouse pointer on it and leave it there. After a second, a small window called button tip ; also known as tool tip or balloon help pops up, giving a hint on the button's meaning.
The button tip disappears as soon as you move the mouse pointer to another item. The status line also displays information about the currently selected item.
By clicking on the status line, you can redisplay the most recent messages. You can get detailed help on any visible DDD item.
Just point on the item you want help and press the F1 key. This pops up a detailed help text. The DDD dialogs all contain Help buttons that give detailed information about the dialog. You can get help on debugger commands by entering help at the debugger prompt.
See Entering Commands , for details on entering commands. Depending on the current state, DDD will give you some hints on what you can do next. All these functions can be customized in various ways see Customizing Help.
If, after all, you made a mistake, don't worry: almost every DDD command can be undone. The Edit menu shows which commands are to be undone and redone next; this is also indicated by the popup help on the Undo and Redo buttons. We first discuss how customizing works in general; then we turn to customizing parts of DDD introduced so far.
This file is read in by DDD upon start-up; the resources specified herein override all other sources except for resources given implicitly by command-line options. Not every resource has a matching command-line option. This works for the most important DDD resources. You can also invoke DDD with an appropriate command-line option.
However, if you save the options see Saving Options , the changed resource will also apply to future invocations. Finally, you can set the appropriate resource in a file named. Options are saved in a file named. Button tips : Turning off tips. Tip of the day : Turning off the tip of the day.
Help Helpers : Helper programs invoked by Help. You can also turn off the hint that is displayed in the status line. See Options , for options to set this resource upon DDD invocation.
The actual tips are controlled by these resources see Customizing : startupTipCount class StartupTipCount Resource The number n of the tip of the day to be shown at startup.
See also the tip n resources. Takes a compressed text from standard input and writes the uncompressed text to standard output. The default value is gzip -d -c ; typical values include zcat and gunzip -c. To specify netscape Useful for limiting DDD memory usage. A negative value means to place no limit. Default is , or kBytes. You can also limit the number of entries in the undo buffer, regardless of size see Customizing : maxUndoDepth class MaxUndoDepth Resource The maximum number of entries in the undo buffer.
This limits the number of actions that can be undone, and the number of states that can be shown in historic mode. A negative value default means to place no limit. Splash Screen : Turning off the splash screen. Window Layout : Re-arranging windows. Customizing Fonts : Using alternate fonts.
Toggling Windows : Turning off windows. Text Fields : Popdown histories. Icons : Iconifying DDD windows. Adding Buttons : Create your own button set. The value applies only to the next DDD invocation. Possible values include: c default for a color visual, g for a multi-level greyscale visual, g4 for a 4-level greyscale visual, and m for a dithered monochrome visual.
Here are the related DDD resources: separateDataWindow class Separate Resource If on , the data window and the debugger console are realized in different top-level windows. If off default , the data window is attached to the debugger console. If off default , the source window is attached to the debugger console.
By default, the DDD tool bars are located on top of the window. If you prefer the tool bar being located at the bottom, as in DDD 2. This is related to the toolbarsAtBottom resource: toolbarsAtBottom class ToolbarsAtBottom Resource Whether source and data tool bars should be placed above source and data, respectively off , default , or below, as in DDD 2. The bottom setting is only supported for separate tool bars--that is, you must either choose separate windows or configure the tool bar to have neither images nor captions see Customizing the Tool Bar.
If you use stacked windows, you can choose whether there should be one tool bar or two tool bars. By default, DDD uses two tool bars if you use separate windows and disable captions and images, but you can also explicitly change the setting via this resource: commonToolBar class ToolBar Resource Whether the tool bar buttons should be shown in one common tool bar at the top of the common DDD window on , default , or whether they should be placed in two separate tool bars, one for data, and one for source operations, as in DDD 2.
See Options , for options to set these resources upon DDD invocation. Each font is specified using two members: The font family is an X font specifications, where the initial foundry - specification may be omitted, as well as any specification after family. Thus, a pair family - weight usually suffices. The Browse button opens a font selection program, where you can select fonts and attributes interactively.
Clicking quit or select in the font selector causes all non-default values to be transferred to the DDD font preferences panel. The following fonts can be set using the preferences panel: Default Font The default DDD font to use for labels, menus, and buttons. Default is helvetica-bold. Default is helvetica-medium. Fixed Width The fixed width DDD font to use for source code, the debugger console, text fields, data displays, and the execution window.
Default is lucidatypewriter-medium. Changes in this panel will not take effect immediately. After having made changes in the panel, DDD will automatically offer you to restart itself, such that you can see the changes taking effect. Note that even after restarting, you still must save options to make the changes permanent. The Reset button restores the most recently saved preferences.
Here are the resources related to font specifications: defaultFont class Font Resource The default DDD font to use for labels, menus, buttons, etc. The font is specified as an X font spec, where the initial Foundry specification may be omitted, as well as any specification after Family. Default value is helvetica-bold. This resource overrides any font size specification in the defaultFont resource see above. The default value is for a Default value is helvetica-medium-r. This resource overrides any font size specification in the variableWidthFont resource see above.
Default value is to lucidatypewriter-medium. This resource overrides any font size specification in the fixedWidthFont resource see above. As all font size resources have the same class and by default the same value , you can easily change the default DDD font size to, say, 9. Here's how to specify the command to select fonts: fontSelectCommand class FontSelectCommand Resource A command to select from a list of fonts.
Whether windows are opened or closed when starting DDD is controlled by the following resources, immediately tied to the View menu items: openDataWindow class Window Resource If off default , the data window is closed upon start-up. A value of 0 default means an unlimited number of values. If off , most recently used values will appear at the top.
This way, all DDD windows are iconified and deiconified as a group. Default is off , meaning that each DDD window can be iconified on its own. This way, you can iconify DDD while it is busy on a command e. See Program Stop , for a discussion. This way, you can iconify DDD during some longer operation and have it uniconify itself as soon as the program stops. Setting this to off leaves the DDD windows iconified.
Here's how it works: Identify the appropriate resource in the Ddd file. See Application Defaults , for details on the application-defaults file. The capabilities of the settings editor depend on the capabilities of your inferior debugger. Clicking on? Clicking on Reset restores the most recently saved settings.
Some debugger settings are insensitive and cannot be changed, because doing so would endanger DDD operation. See the gdbInitCommands and dbxInitCommands resources for details. All debugger settings except source and object paths are saved with DDD options.
Opening Files : How to open a program for debugging. Looking up Items : Searching files and functions. Customizing Source : Arranging the source window. Node: Compiling for Debugging , Next: Opening Files , Up: Navigating Compiling for Debugging In order to debug a program effectively, you need to generate debugging information when you compile it. This debugging information is stored in the object file; it describes the data type of each variable or function and the correspondence between source line numbers and addresses in the executable code.
Many C compilers are unable to handle the -g and -O options together. Using those compilers, you cannot generate optimized executables containing debugging information. We recommend that you always use -g whenever you compile a program.
You may think your program is correct, but there is no sense in pushing your luck. When you debug a program compiled with -g -O , remember that the optimizer is rearranging your code; the debugger shows you what is really there. Do not be too surprised when the execution path does not exactly match your source file! An extreme example: if you define a variable, but never use it, DDD never sees that variable--because the compiler optimizes it out of existence. Opening Programs : How to open a program for debugging.
Opening Core Dumps : Analyze a previous crash. Opening Source Files : Open a source file of the program. Filtering Files : DDD only lists matching files. This gives you a list of available classes to choose from. If no sources are found, See Source Path , for specifying source directories.
Click on Open to open the core dump. Using GDB , this gives you a list of the sources used for compiling your program. Using other inferior debuggers, this gives you a list of accessible source files, which may or may not be related to your program.
Click on Open to open the source file. See Source Path , if no sources are found. This requires that DDD opens each file, which may take time. See Customizing File Filtering , if you want to turn off this feature. In the source window, you can lookup and examine function and variable definitions as well as search for arbitrary occurrences in the source text.
Looking up Definitions : Jump towards a specific item. Textual Search : Search within the current source. Looking up Previous Locations : Navigate back and forth.
Node: Looking up Definitions , Next: Textual Search , Up: Looking up Items Looking up Definitions If you wish to lookup a specific function or variable definition whose name is visible in the source text, click with mouse button 1 on the function or variable name.
The name is copied to the argument field. Change the name if desired and click on the Lookup button to find its definition. As a faster alternative, you can simply press mouse button 3 on the function name and select the Lookup item from the source popup menu. As an even faster alternative, you can also double-click on a function call an identifier followed by a character to lookup the function definition.
If a source file is not found, See Source Path , for specifying source directories. The identifier is copied to the argument field. By default, DDD finds only complete words. Node: Source Path , Previous: Looking up Previous Locations , Up: Looking up Items Specifying Source Directories Executable programs sometimes do not record the directories of the source files from which they were compiled, just the names. Even when they do, the directories could be moved between the compilation and your debugging session.
Here's how GDB accesses source files; other inferior debuggers have similar methods. GDB has a list of directories to search for source files; this is called the source path. Each time GDB wants a source file, it tries all the directories in the list, in the order they are present in the list, until it finds a file with the desired name. Note that the executable search path is not used for this purpose. Neither is the current working directory, unless it happens to be in the source path.
If GDB cannot find a source file in the source path, and the object program records a directory, GDB tries that directory too. If the source path is empty, and there is no record of the compilation directory, GDB looks in the current directory as a last resort. If Debugger Settings has no suitable entry, you can also specify a source path for the inferior debugger when invoking DDD. See Inferior Debugger Options , for details. If DDD does not find a source file for any reason, check the following issues: In order to debug a program effectively, you need to generate debugging information when you compile it.
Without debugging information, the inferior debugger will be unable to locate the source code. To request debugging information, specify the -g option when you run the compiler. See Compiling for Debugging , for details.
You may need to tell your inferior debugger where the source code files are. See Source Path , for details. Using GDB , you can also create a local.
Here, path is a colon-separated list of source paths. As an alternative, DDD can also indicate these positions using text characters. This also makes DDD run slightly faster, especially when scrolling. This setting is tied to this resource: displayGlyphs class DisplayGlyphs Resource If this is on , the current execution position and breakpoints are displayed as glyphs; otherwise, they are shown through characters in the text.
The default is on. See Options , for the --glyphs and --no-glyphs options. You can further control glyphs using the following resources: cacheGlyphImages class CacheMachineCode Resource Whether to cache share glyph images on or not off.
Caching glyph images requires less X resources, but has been reported to fail with Motif 2. Default is off for Motif 2. A small value results in glyphs being scrolled with the text, a large value disables glyphs while scrolling and makes scrolling faster. Default: Raising this value causes more glyphs to be allocated, possibly wasting resources that are never needed. Otherwise, occurrences are found regardless of case.
Otherwise, arbitrary occurrences are found. The default is off. You can instruct DDD to indent the source code, leaving more room for breakpoints and execution glyphs.
The default value is 0 for no indentation at all. Default: 0. By default, DDD uses a minimum indentation for script languages. Default: 4. The maximum width of line numbers is controlled by this resource.
Line numbers wider than this value extend into the breakpoint space. Default is 2. Default is 3. This is related to the following resource: useSourcePath class UseSourcePath Resource If this is off default , the inferior debugger refers to source code locations only by their base names.
If this is on default , DDD uses the full source code paths. By default, DDD caches source files in memory. This is convenient for remote debugging, since remote file access may be slow. This is related to the following resource: cacheSourceFiles class CacheSourceFiles Resource Whether to cache source files on , default or not off.
Caching source files requires more memory, but makes DDD run faster. If this is off , DDD always presents all available files. Node: Stopping , Next: Running , Previous: Navigating , Up: Top Stopping the Program The principal purposes of using a debugger are so that you can stop your program before it terminates; or so that, if your program runs into trouble, you can investigate and find out why.
Inside DDD , your program may stop for any of several reasons, such as a signal, a breakpoint, or reaching a new line after a DDD command such as Step. You may then examine and change variables, set new breakpoints or remove old ones, and then continue execution.
The inferior debuggers supported by DDD support two mechanisms for stopping a program upon specific events: A breakpoint makes your program stop whenever a certain point in the program is reached. For each breakpoint, you can add conditions to control in finer detail whether your program stops. Typically, breakpoints are set before running the program.
A watchpoint is a special breakpoint that stops your program when the value of an expression changes. Breakpoints : Stop at a certain point. Watchpoints : Stop at a certain condition.
Interrupting : Stop manually. Stopping X Programs : Take care of grabbed pointers! Setting Breakpoints by Location Breakpoints are set at a specific location in the program. If the source line is visible, click with mouse button 1 on the left of the source line and then on the Break button.
As a faster alternative, you can simply press mouse button 3 on the left of the source line and select the Set Breakpoint item from the line popup menu. As an even faster alternative, you can simply double-click on the left of the source line to set a breakpoint. Click on the Break button and enter the location. If you find this number of alternatives confusing, be aware that DDD users fall into three categories, which must all be supported. Novice users explore DDD and may prefer to use one single mouse button.
Advanced users know how to use shortcuts and prefer popup menus. Experienced users prefer the command line interface. Breakpoints are indicated by a plain stop sign, or as n , where n is the breakpoint number. A stop sign with a question mark or? Setting Breakpoints by Name If the function name is visible, click with mouse button 1 on the function name.
The function name is then copied to the argument field. Click on the Break button to set a breakpoint there. As a shorter alternative, you can simply press mouse button 3 on the function name and select the Break at item from the popup menu. As yet another alternative, you can click on Break The breakpoint location is copied to the argument field. Click on the Clear button to delete all breakpoints there. If the function name is visible, click with mouse button 1 on the function name.
The function name is copied to the argument field. Click on the Clear button to clear all breakpoints there. As a faster alternative, you can simply press mouse button 3 on the breakpoint and select the Delete Breakpoint item from the popup menu. This makes the breakpoint inoperative as if it had been deleted, but remembers the information on the breakpoint so that you can enable it again later.
To enable it again, select Enable Breakpoint. The Disable Breakpoint item is also accessible via the Clear button. Just press and hold mouse button 1 on the button to get a popup menu. Temporary breakpoints are convenient to make the program continue up to a specific location: just set the temporary breakpoint at this location and continue execution. The Continue Until Here item from the popup menu sets a temporary breakpoint on the left of the source line and immediately continues execution.
Execution stops when the temporary breakpoint is reached. Node: Editing Breakpoint Properties , Next: Breakpoint Conditions , Previous: Temporary Breakpoints , Up: Breakpoints Editing Breakpoint Properties You can change all properties of a breakpoint by pressing mouse button 3 on the breakpoint symbol and select Properties from the breakpoint popup menu.
This will pop up a dialog showing the current properties of the selected breakpoint. As an even faster alternative, you can simply double-click on the breakpoint. Click on Lookup to move the cursor to the breakpoint's location. Click on Enable to enable the breakpoint. Click on Disable to disable the breakpoint.
0コメント