AQtrace - How It Works
As the software industry progresses, applications become more and more complex. Modern applications may include dozens and even hundreds of modules that use each other. These modules can be supplied by third-party vendors and it may be rather difficult to find the cause of an error or an exception when it occurs. To simplify the search, developers use memory dumps and various error reports that include specific information about the application state when an exception occurs.
AQtrace is a set of libraries and components that automatically generate error reports and transfer them to developers for processing and analysis. It includes a specific component that is built into your application and monitors the application execution. When an exception occurs, the component automatically generates an error report and sends it to the server that receives the report and saves it for further processing and analysis.
How it Works for End-Users
AQtrace is completely transparent for end-users. They may not even know that your application uses AQtrace. They run and work with your application as usual. However, if an exception occurs during the run, they see a notification window:

This window informs the user about the problem and suggests that the users send an error report to the application developer. If the user presses Send, the generated error report is sent.
By selecting or clearing the check boxes in the notification window, the end-user can also control other actions. For instance, if the I would like to specify my contact info… check box is selected, then after pressing the Send button, AQtrace displays the User Info dialog where the end-user can enter their name, e-mail and an additional description of the problem:

After the notification window is closed, the application may be closed or restarted (according to the window’s check boxes) and the end-user can continue to work with your application.
AQtrace Components — Overview
AQtrace includes various modules and components that function on different computers. One of the components traces the application’s execution, generates error reports when an exception occurs and sends these reports to developers. Other components work on the server side. They receives reports and save them for further processing and analysis. The AQtrace package includes a special application that performs in-depth analysis of error reports. AQtrace also includes special server-side plug-ins that add error reports to issue-tracking systems. The general concept of using AQtrace components looks like:

AQtrace Reporter
The subsystem that traces exceptions, generates error reports and sends them to developers is called AQtrace Reporter. It is implemented in special dynamic link libraries: aqReporter.dll and aqDbgHelp.dll (aqReporter is the “main” library and aqDbgHelp is a helper). These libraries are part of your AQtrace installation. They are redistributable and you must ship them along with your application.
When the application starts, it loads the aqReporter library and initializes AQtrace Reporter. After that, the Reporter starts monitoring the application execution. AQtrace Reporter can detect any exceptions that occur in your application. It intersects them on a low-level and can handle exceptions regardless of whether they are included in the try-catch blocks or not.
If an exception occurs, the Reporter generates an error report and displays a notification window. If the user presses the Send button in this window, AQtrace Reporter sends the generated report to the server. To send error reports, AQtrace Reporter does not use e-mail. It sends the reports via the HTTP protocol.
AQtrace Server-Side Components
Error reports are sent to the server that receives and processes them. To do this, the server contains the Report Collector component and a special AQtrace Service application. The server-side components also include special plug-ins that add received reports to issue-tracking systems:
The Report Collector is an .asp page that receives error reports on the server side. The page contains code that can relay the report to another server or store it on the server computer.
AQtrace Service is an application that runs as a service on the server. It marks reports as duplicated (if needed) and saves them in the persistent storage.
AQtrace also includes server-side plug-ins that connect to the storage, check whether a new report has arrived and adds work items to issue-tracking systems on the base of the received reports. Currently, AQtrace can submit issues to Microsoft Visual Studio Team System and Bugzilla.
AQtrace Viewer
To analyze error reports generated by AQtrace, you use AQtrace Viewer — a special utility that is included with the AQtrace package. It allows you to view and analyze call stacks and disassembly code and view information included in the report.