Changes between Initial Version and Version 1 of AppDebugWin


Ignore:
Timestamp:
Apr 25, 2007, 10:58:24 AM (17 years ago)
Author:
Nicolas
Comment:

Converted by an automatic script

Legend:

Unmodified
Added
Removed
Modified
  • AppDebugWin

    v1 v1  
     1= Application debugging on Windows =
     2
     3
     4=== Contents ===
     5
     6 * [http://boinc.berkeley.edu/#Anatomy of a Windows stack trace Anatomy of a Windows stack trace]
     7  * [http://boinc.berkeley.edu/#Introduction Introduction]
     8  * [http://boinc.berkeley.edu/#Debugger version Debugger version]
     9  * [http://boinc.berkeley.edu/#Module List Module List]
     10  * [http://boinc.berkeley.edu/#Process Information Process Information]
     11  * [http://boinc.berkeley.edu/#Thread Information Thread Information]
     12   * [http://boinc.berkeley.edu/#General Information General Information]
     13   * [http://boinc.berkeley.edu/#Unhandled Exception Record Unhandled Exception Record]
     14   * [http://boinc.berkeley.edu/#Registers Registers]
     15   * [http://boinc.berkeley.edu/#Callstack Callstack]
     16  * [http://boinc.berkeley.edu/#Debug Message Dump Debug Message Dump]
     17  * [http://boinc.berkeley.edu/#Foreground Window Data Foreground Window Data]
     18 * [http://boinc.berkeley.edu/#Symbol Stores Symbol Stores]
     19  * [http://boinc.berkeley.edu/#SymIntroduction Introduction]
     20  * [http://boinc.berkeley.edu/#SymRequirements Requirements]
     21  * [http://boinc.berkeley.edu/#SymProject Project Symbol Store]
     22  * [http://boinc.berkeley.edu/#SymAdd Adding symbols to the symbol store]
     23  * [http://boinc.berkeley.edu/#SymUpload Uploading symbols to the symbol store]
     24 * [http://boinc.berkeley.edu/#Common Issues Common Issues]
     25  * [http://boinc.berkeley.edu/#CommonIntroduction Introduction]
     26  * [http://boinc.berkeley.edu/#Common0x80000003 Breakpoint Encountered (0x80000003)]
     27  * [http://boinc.berkeley.edu/#Common0xc000000d Invalid Parameter (0xc000000d)]
     28  * [http://boinc.berkeley.edu/#Common0xc0000096 Privileged Instruction (0xc0000096)]
     29  * [http://boinc.berkeley.edu/#Common0xc00000fd Stack Overflow (0xc00000fd)]
     30  * [http://boinc.berkeley.edu/#Common0xe06d7363 Out of Memory Exception (0xe06d7363)]
     31
     32
     33=== [http://boinc.berkeley.edu/ Anatomy of a Windows stack trace] ===
     34 [http://boinc.berkeley.edu/ Introduction] This section is going to describe what the output of a crash dump looks like and what it contains.
     35
     36
     37
     38[http://boinc.berkeley.edu/ Debugger version]
     39{{{
     40BOINC Windows Runtime Debugger Version 5.5.0
     41
     42Dump Timestamp    : 04/16/06 23:41:39
     43Debugger Engine   : 4.0.5.0
     44Symbol Search Path: C:\BOINCSRC\Main\boinc_samples\win_build\Release;
     45C:\BOINCSRC\Main\boinc_samples\win_build\Release;
     46srv*c:\windows\symbols*http://msdl.microsoft.com/download/symbols;
     47srv*C:\DOCUME~1\romw\LOCALS~1\Temp\symbols*http://boinc.berkeley.edu/symstore
     48}}}
     49::This area provides some basic information about the version of the BOINC debugger  being used, when the crash occured, and what the internal version of the Windows debugger technology is being used.
     50
     51Symbol search paths are used to inform the debugger where it might be able to find the symbol files related to the modules loaded in memory.  Entries prefixed with 'srv*' are used to denote a web based symbol store. DbgHelp will use them if symsrv can be loaded at the time of the crash.
     52
     53If you see a load library failure for either dbghelp.dll or symsrv.dll then there is a pretty good chance that most of the data in the dump will be useless.
     54
     55
     56
     57[http://boinc.berkeley.edu/ Module List]
     58{{{
     59ModLoad: 00400000 00060000 C:\BOINCSRC\Main\boinc_samples\win_build\Release\uppercase_5.10_windows_intelx86.exe (PDB Symbols Loaded)
     60ModLoad: 7c800000 000c0000 C:\WINDOWS\system32\ntdll.dll (5.2.3790.1830) (PDB Symbols Loaded)
     61    File Version   : 5.2.3790.1830 (srv03_sp1_rtm.050324-1447)
     62    Company Name   : Microsoft Corporation
     63    Product Name   : Microsoft® Windows® Operating System
     64    Product Version: 5.2.3790.1830
     65}}}
     66::Information about which modules were loaded into the processes memory space can be found here. The first hexadecimal value is the address in memory in which the module was loaded;  the second hexadecimal is the size of the module.
     67
     68If a version record was found inside the module, it'll be dumped out as part of the module list dump.
     69
     70If the correct symbol file can be found, it'll display what symbol file type is in use.  The three most common symbol types in modern software are 'PDB', 'exports', and  '-no symbols-'. Symbol files are pretty large and so most projects do not like to include  them as part of the APP VERSION package. Luckily Microsoft has created a technology called  Symbol Stores which enable an application to be able to grab its symbol file from a web  server at the time of a crash in a compressed format.  We will describe setting up a symbol store later in this document.
     71
     72PDB files are generated at compilation time and usually have to be turned on for release builds. This file will contain all the needed information to generate a pretty good  callstack which you can use to diagnose problems.
     73
     74Export symbols usually only appear on DLLs since DLLs can export function pointers via the export table. When you see this in the module list you'll only see functions which  are listed in the export table in the callstack.
     75
     76No symbols means that the runtime debugger could not determine a way to give you any  symbolic information. You'll only receive function pointers in the callstack.
     77
     78
     79
     80[http://boinc.berkeley.edu/ Process Information]
     81{{{
     82*** Dump of the Process Statistics: ***
     83
     84- I/O Operations Counters -
     85Read: 24, Write: 0, Other 206
     86
     87- I/O Transfers Counters -
     88Read: 0, Write: 358, Other 0
     89
     90- Paged Pool Usage -
     91QuotaPagedPoolUsage: 29116, QuotaPeakPagedPoolUsage: 29228
     92QuotaNonPagedPoolUsage: 6624, QuotaPeakNonPagedPoolUsage: 6640
     93
     94- Virtual Memory Usage -
     95VirtualSize: 64102400, PeakVirtualSize: 71045120
     96
     97- Pagefile Usage -
     98PagefileUsage: 26218496, PeakPagefileUsage: 33697792
     99
     100- Working Set Size -
     101WorkingSetSize: 19210240, PeakWorkingSetSize: 26361856, PageFaultCount: 6729
     102}}}
     103::This is some overall useful information about the process. Most of the time the 'Virtual Memory', 'Pagefile', and 'Working Set' are the most useful indications  of whether or not the process was under low available memory pressure from the OS.
     104
     105
     106
     107[http://boinc.berkeley.edu/ Thread Information]
     108{{{
     109*** Dump of the Worker thread (a4): ***
     110}}}
     111::This identifies the thread for which additional information is going to be  displayed. Both the thread name and thread ID are displayed. To set the thread name for any thread you have created in your program just call diagnostics_set_thread_name() as defined in diagnostics.h to set the thread name for the currently executing thread.
     112
     113
     114
     115[http://boinc.berkeley.edu/ General Information]
     116{{{
     117- Information -
     118Status: Waiting, Wait Reason: UserRequest, Kernel Time: 0.000000, User Time: 0.000000, Wait Time: 38241696.000000
     119}}}
     120::Status shows what state the thread was in when the snapshot was taken. If the thread is waiting, wait reason will describe why the thread is waiting. If the thread is running both the base thread priority and current thread priority will be displayed.
     121
     122Kernel time, user time, and wait time describe how much time, in nanoseconds, the thread has spent in each of those states.
     123
     124
     125
     126[http://boinc.berkeley.edu/ Unhandled Exception Record]
     127{{{
     128- Unhandled Exception Record -
     129Reason: Breakpoint Encountered (0x80000003) at address 0x7C822583
     130}}}
     131::This section if included in the thread describes what event ocurred that caused the runtime debugger to engage. Structured Exceptions in Windows are not the same thing as C++ exceptions. Unless you are using a compiler that knows about both types it is unlikely that a C++ catch is going to actually catch this type of exception.
     132
     133Further information about Structured Exception Handling can be found  [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/about_structured_exception_handling.asp  here. ]
     134
     135It is important to note that both hardware and software exceptions can bubble up from the operating system through this mechinism.
     136
     137The example above shows that  EXCEPTION_BREAKPOINT(PlatformSDK\Include\winbase.h) was raised at 0x7C822583.  EXCEPTION_BREAKPOINT is defined as STATUS_BREAKPOINT(PlatformSDK\Include\ntstatus.h)  which is defined as ((NTSTATUS)0x80000003L).
     138
     139
     140
     141[http://boinc.berkeley.edu/ Registers]
     142{{{
     143- Registers -
     144eax=00000000 ebx=00000000 ecx=77e4245b edx=7c82ed54 esi=77e88bfe edi=00459f40
     145eip=7c822583 esp=00aafd64 ebp=00aaffb4
     146cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000202
     147}}}
     148::This is a basic dump of the processor registers at the time the exception was raised and will look different for each process type.
     149
     150In this example these are the registers and flags for the Intel based x86 processor.
     151
     152
     153
     154[http://boinc.berkeley.edu/ Callstack]
     155{{{
     156- Callstack -
     157ChildEBP RetAddr  Args to Child
     15800aafd60 00402221 00000000 00000000 00000000 00000001 ntdll!_DbgBreakPoint@0+0x0 FPO: [0,0,0]
     15900aaffb4 0042684e 77e66063 00000000 00000000 00000000 uppercase_5.10_windows_intelx86!worker+0x0 (c:\boincsrc\main\boinc_samples\uppercase\upper_case.c:181)
     16000aaffb8 77e66063 00000000 00000000 00000000 00000000 uppercase_5.10_windows_intelx86!foobar+0x0 (c:\boincsrc\main\boinc\api\graphics_impl.c:75) FPO: [1,0,0]
     16100aaffec 00000000 00426840 00000000 00000000 00000000 kernel32!_BaseThreadStart@8+0x0 (c:\boincsrc\main\boinc\api\graphics_impl.c:75)
     162}}}
     163::This describes the state in which the thread was in at the time of the exception. ChildEBP and RetAddr are not really useful unless you can reproduce the issue using the same OS version.
     164
     165Args to Child are the first four parameters passed to the function.
     166
     167The next piece of information has the following format: <Module Name>!<Function Name>@<Function Ordinal>+<Symbol Offset> <File/Line Information>
     168
     169
     170
     171Module Name   The friendly name for the DLL or EXE.   Function Name   The name of the function.   Function Ordinal   Function ordinals only apply to functions that are publically exported from a DLL.   Symbol Offset   If the symbol file being used has private symbols stripped, then the symbol displayed may        not be the correct symbol.     You can use the symbol offset to lookup the correct symbol       from the object file or some other tool that can map symbols to source.   File/Line Information   Source file and line number information is not available in all symbol file formats, but       if it is there it'll be displayed.    PDB files are generally the best symbol file format to use. [http://boinc.berkeley.edu/ Debug Message Dump]
     172{{{
     173*** Debug Message Dump ****
     174}}}
     175::This feature is disabled by default.
     176
     177What is allows for is capturing the debugger viewport data at runtime just as though you were running the application within a debugger. Since all applications use the same block of memory is can slow down any and all applications that want to write to the debugger viewport, even on release builds which is why it is disabled by default. Video capture, edit, and playback software tends to dump data to the viewport even when running a release build.
     178
     179The following regedit script demonstrates how to enable the debug message dump:
     180
     181
     182{{{
     183Windows Registry Editor Version 5.00
     184
     185[HKEY_CURRENT_USER\Software\Space Sciences Laboratory, U.C. Berkeley\BOINC Diagnostics]
     186"CaptureMessages"=dword:00000001
     187}}}
     188::      To disable able the message capture use this regedit script:
     189{{{
     190Windows Registry Editor Version 5.00
     191
     192[HKEY_CURRENT_USER\Software\Space Sciences Laboratory, U.C. Berkeley\BOINC Diagnostics]
     193"CaptureMessages"=dword:00000000
     194}}}
     195::
     196
     197[http://boinc.berkeley.edu/ Foreground Window Data]
     198{{{
     199*** Foreground Window Data ***
     200    Window Name      :
     201    Window Class     :
     202    Window Process ID: 16f8
     203    Window Thread ID : ae8
     204}}}
     205::This shows which window has the user input focus. The feature was originally meant to detect potiential problems with 3rd party application injecting code into BOINC applications and displaying UI to the user.
     206
     207This feature turns out to be problematic since the foreground window might be hung  which would mean that trying to get the window name and class would cause the runtime  debugger to hang as well. This feature will probably be removed in the future.
     208
     209
     210
     211
     212=== [http://boinc.berkeley.edu/ Symbol Stores] ===
     213 [http://boinc.berkeley.edu/ Introduction] In order to obtain useful diagnostic information in the event of an application crash,  it is necessary to dump a callstack and any other relevant information about what was  going on at the time of the crash.  Symbols are only needed during a crash event,  therefore they are stripped from most applications to cut down on the binary size and  bandwidth requirements to deploy a new release.
     214
     215Without symbols, callstacks tend to be nothing more than a list of function pointers  in memory.  A developer has to load the un-stripped executable in memory using the  same operating system and similar processor to jump to that memory address in order  to determine the function name and parameters.  This is very labor intensive and  generally not a very fun job.
     216
     217Microsoft created a technology called a 'Symbol Store' to use with their debugger  technology which allows Windows debuggers to locate and download compressed symbol  files to diagnose problems and convert function pointers into human readable text.  This greatly speeds up the process of diagnosing and fixing bugs.
     218
     219With the BOINC Runtime Debugger for Windows framework a project can publish their  symbol files and only have to distribute the application to each of the BOINC  clients.  When a crash event occurs the runtime framework will download the symbol  file from the symbol store and then proceed to dump as much diagnostic information  as possible to help projects diagnose the failure.
     220
     221
     222
     223[http://boinc.berkeley.edu/ Requirements] You'll need the latest stable release of the  [http://www.microsoft.com/whdc/devtools/debugging/default.mspx    Debugging Tools for Windows. ]
     224
     225Verify that your executable is setup to generate PDB debugging symbols for a release build.
     226
     227Verify that the advance linker option to generate a checksum is enabled for a release build.
     228
     229You'll need to explictly name both your EXE and PDB before compilation since the debugger bases the name of the PDB file off of information that is stored in the executable header.
     230
     231
     232
     233[http://boinc.berkeley.edu/ Project Symbol Store] Specifying a project wide symbol store is as easy as adding the symstore element to your config.xml file for the project.
     234
     235Below is an XML shred with an example symstore element.
     236
     237
     238
     239
     240{{{
     241<boinc>
     242    <config>
     243        <symstore>http://sample.example.com/symstore</symstore>
     244    </config>
     245</boinc>
     246}}}
     247
     248
     249[http://boinc.berkeley.edu/ Adding symbols to the symbol store] [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/debug/base/using_symstore.asp Symstore] is a utility to manage symbol stores.  You'll want to create a local symbol store on your Windows build machine in which you'll initially add new symbol files with each revision of your application.
     250
     251Symstore will compress the symbol file and then copy it into your local symbol store.
     252
     253Below is an example command which you can run from the Windows command line or cygwin command line.
     254
     255
     256
     257
     258{{{
     259symstore.exe add /l /f c:\SampleSrc\*.pdb /s c:\symstore /compress /t "Sample" /v "5.02" /o /c "Application Release"
     260}}}
     261::
     262
     263[http://boinc.berkeley.edu/ Uploading symbols to the symbol store] Most projects tend to use scp to copy files between Windows machines and their project server.
     264
     265The example below copies the entire symstore to the target location.  After the copy operation you can delete all the subdirectories except '000Admin' to save time uploading for future application symbols.
     266
     267
     268
     269
     270{{{
     271pscp.exe -r -C -batch c:\symstore sample@project.example.com:projects/sample/html/user/symstore
     272}}}
     273::
     274
     275
     276=== [http://boinc.berkeley.edu/ Common Issues] ===
     277 [http://boinc.berkeley.edu/ Introduction] In this section we'll list a few things to look for when reading the dumps.  Please keep in mind that every application is different, but there should be enough similiarity that you should be able to figure something out.
     278
     279
     280
     281[http://boinc.berkeley.edu/ Breakpoint Encountered (0x80000003)]
     282{{{
     283*** Dump of the Worker thread (15c4): ***
     284
     285- Information -
     286Status: Waiting, Wait Reason: UserRequest, Kernel Time: 156250.000000, User Time: 0.000000, Wait Time: 38126444.000000
     287
     288- Unhandled Exception Record -
     289Reason: Breakpoint Encountered (0x80000003) at address 0x7C822583
     290
     291- Registers -
     292eax=00000000 ebx=00000000 ecx=77e4245b edx=7c82ed54 esi=00b2fb78 edi=00b2fed8
     293eip=7c822583 esp=00b2fb74 ebp=00b2fee4
     294cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000206
     295
     296- Callstack -
     297ChildEBP RetAddr  Args to Child
     29800b2fb70 00444232 00b2ffb8 00b2feec 00000000 cccccccc ntdll!_DbgBreakPoint@0+0x0 FPO: [0,0,0]
     29900b2fee4 0049a187 00000000 00000000 00000000 cccccccc uppercase_5.10_windows_intelx86!worker+0x8 (boinc_samples\uppercase\upper_case.c:176)
     30000b2ffb8 77e66063 00000000 00000000 00000000 00000000 uppercase_5.10_windows_intelx86!foobar+0x8 (boinc\api\graphics_impl.c:74)
     30100b2ffec 00000000 0043f4ba 00000000 00000000 00000000 kernel32!_BaseThreadStart@8+0x0 (boinc\api\graphics_impl.c:74)
     302}}}
     303::This kind of error is an intentional error.  Somewhere in the code base it encountered a breakpoint.
     304
     305The callstack will point to the function that started the call to the breakpoint function.
     306
     307To add manual breakpoints to your code for diagnostics purposes you can call the Windows API:
     308
     309
     310{{{
     311void DebugBreak( void );
     312}}}
     313::
     314
     315[http://boinc.berkeley.edu/ Invalid Parameter (0xc000000d)] Starting with Visual Studio 2005, Microsoft re-vamped the whole C Runtime Library.  Part of the re-vamp process was to do parameter checking on each function.  Places that would normally return a NULL value now cause a structured exception to be thrown.
     316
     317The nature of this structed exception is different than most as they specifically coded it so that it will not engage the BOINC Runtime Debugger and it'll display a dialog box asking the user if they wish to debug the error.  If the user cancels the error code 0xc000000d is returned without any more information.
     318
     319To get more information with this error you'll need to create a function like this:
     320
     321
     322{{{
     323#ifdef _WIN32
     324void AppInvalidParameterHandler(const wchar_t* expression, const wchar_t* function, const wchar_t* file, unsigned int line,     uintptr_t pReserved ) {
     325        fprintf(
     326                stderr,
     327                "Invalid parameter detected in function %s. File: %s Line: %d\n",
     328                function,
     329                file,
     330                line
     331        );
     332        fprintf(
     333                stderr,
     334                "Expression: %s\n",
     335                expression
     336        );
     337        // Cause a Debug Breakpoint.
     338        DebugBreak();
     339}
     340#endif
     341}}}
     342::The following code block should be added after the call to boinc_diagnostics_init():
     343
     344
     345{{{
     346#ifdef _WIN32
     347        // Every once and awhile something looks at a std::vector or some other
     348        // CRT/STL construct that throws an exception when an invalid parameter
     349        // is detected.  In this case we should dump whatever information we
     350        // can and then bail.  When we bail we should dump as much data as
     351        // possible.
     352        _set_invalid_parameter_handler(AppInvalidParameterHandler);
     353#endif
     354}}}
     355::When this issues happens in the future it'll describe which CRT function call was passed an invalid parameter and it should dump out the callstack for all threads.
     356
     357The function blocks above overwrite the default behavior of the CRT when an invalid  parameter is detected.
     358
     359
     360
     361[http://boinc.berkeley.edu/ Privileged Instruction (0xc0000096)]
     362{{{
     363- Unhandled Exception Record -
     364Reason: Privileged Instruction (0xc0000096) at address 0x008E9808
     365
     366- Registers -
     367eax=00000400 ebx=00000000 ecx=00002922 edx=00b0c650 esi=01e1f7ec edi=027e2abc
     368eip=008e9808 esp=01e1f778 ebp=ffffffff
     369cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010202
     370
     371- Callstack -
     372ChildEBP RetAddr  Args to Child
     37301e1f7b4 008ea16b 3f4bcaf9 3f827d51 01e1f7ec 01e1f7fc rosetta_beta_5.19_windows_intel!spherical+0x1 (rosetta++\structure.cc:1436)
     37401e1f83c 008ec11f 00b38180 00000003 00000009 01e1f974 rosetta_beta_5.19_windows_intel!HSpair_score+0x0 (rosetta++\structure.cc:367)
     37501e1f854 008b6d18 00b38058 00b3805c 00b38180 00b381b0 rosetta_beta_5.19_windows_intel!evaluate_ss+0x6 (rosetta++\structure.cc:102)
     37601e1f974 00937bf6 a8af5c9d 0001c3f9 00001473 00000100 rosetta_beta_5.19_windows_intel!scorefxn+0x25 (rosetta++\score.cc:190)
     37701e1f9b0 005e435f 00000009 008b7960 0001c3f9 a8af5cd5 rosetta_beta_5.19_windows_intel!main_frag_trial+0x4 (rosetta++    orsion_bbmove_trials.cc:446)
     37801e1fb74 006f1c01 a8af5e9d 3030302e 3c303030 00000000 rosetta_beta_5.19_windows_intel!fold_abinitio+0xc (rosetta++\fold_abinitio.cc:270)
     37901e1ffb0 006363c0 7c80b50b 00000000 3030302e 3c303030 rosetta_beta_5.19_windows_intel!main_rosetta+0x5 (rosetta++\main.cc:343)
     38001e1ffb4 7c80b50b 00000000 3030302e 3c303030 00000000 rosetta_beta_5.19_windows_intel!foobar+0x0 (boinc\api\graphics_impl.c:75)
     38101e1ffec 00000000 006363b0 00000000 00000000 00000000 kernel32!_BaseThreadStart@8+0x0 (boinc\api\graphics_impl.c:75)
     382}}}
     383::In this example it appears the processor took exception to the fact that a user mode process attempted to push a kernel mode address onto the stack without first switching to kernel mode.
     384
     385Look at the EBP register, 'ffffffff' when converted into a signed int is equal to '-1'  and when converted to an unsigned int it is equal to 4GB.  On Windows anything above 2GB  is considered a kernel mode address.  If the Windows machine supports PAE and the /3GB boot option is specified in BOOT.INI then kernel addresses will start at 3GB instead.
     386
     387What has probably happened here is that a function is about to be called and a 'push EBP' instruction was called to push a new address onto the stack, the CPU threw the exception  since the address was outside user mode land. EBP should have had a similar progression  as all the other stack frames ChildEBP values.
     388
     389If EBP had some random kernel mode address it would be pretty easy to dismiss this as a CPU overheating.  'ffffffff' begs the question is the stack being overwritten by an error result from another function?
     390
     391Investigation of this issue is still ongoing.
     392
     393
     394
     395[http://boinc.berkeley.edu/ Stack Overflow (0xc00000fd)] An application will throw this exception when one of it's threads exceed the 1MB stack size allotment.
     396
     397
     398
     399[http://boinc.berkeley.edu/ Out of Memory Exception (0xe06d7363)]
     400{{{
     401*** Dump of the  thread (d08): ***
     402
     403- Information -
     404Status: Waiting, Wait Reason: UserRequest, Kernel Time: 156250.000000, User Time: 625000.000000, Wait Time: 4725904.000000
     405
     406- Registers -
     407eax=00000000 ebx=00000004 ecx=0012e56c edx=7c82ed54 esi=00000798 edi=00000000
     408eip=7c82ed54 esp=0012e4e4 ebp=0012e554
     409cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
     410
     411- Callstack -
     412ChildEBP RetAddr  Args to Child
     4130012e4e0 7c822124 77e6baa8 00000798 00000000 00000000 ntdll!_KiFastSystemCallRet@0+0x0 FPO: [0,0,0]
     4140012e4e4 77e6baa8 00000798 00000000 00000000 0012e838 ntdll!_NtWaitForSingleObject@12+0x0 FPO: [3,0,0]
     4150012e554 77e6ba12 00000798 ffffffff 00000000 0012e7d4 kernel32!_WaitForSingleObjectEx@12+0x0
     4160012e568 0050e307 00000798 ffffffff 0012e838 00000000 kernel32!_WaitForSingleObject@8+0x0
     4170012e57c 77e995f7 0012e838 e06d7363 02001ea0 00b01ba8 rosetta++.vc.boinc.release!boinc_catch_signal+0xa (boinc\lib\diagnostics_win.c:1798)
     4180012e7d4 00988c7b 0012e838 00000000 00000000 00000000 kernel32!_UnhandledExceptionFilter@4+0x0 (boinc\lib\diagnostics_win.c:1798)
     4190012e7f4 0097ab90 e06d7363 0012e838 009876a0 00af991c rosetta++.vc.boinc.release!_XcptFilter+0x9 (crt\src\winxfltr.c:237)
     4200012e800 009876a0 00af991c 0012ffc0 00af9900 00000001 rosetta++.vc.boinc.release!__tmainCRTStartup+0x11 (crt\src\crt0.c:327) FPO: [0,0,0]
     4210012e814 00974ace 00000000 00000000 0012e860 00000000 rosetta++.vc.boinc.release!@_EH4_CallFilterFunc@8+0x0 (crt\src\crt0.c:327) FPO: [0,0,4]
     4220012e83c 7c82eeb2 0012ebf8 0012ffb0 0012e918 0012e8fc rosetta++.vc.boinc.release!_except_handler4+0x0 (crt\src\crt0.c:327)
     4230012e860 7c82ee84 0012ebf8 0012ffb0 0012e918 0012e8fc ntdll!ExecuteHandler2@20+0x0 (crt\src\crt0.c:327)
     4240012e908 7c82eda4 0012e000 0012e918 00010007 02000000 ntdll!ExecuteHandler@20+0x0 (crt\src\crt0.c:327)
     4250012ebe8 77e55dea 0012ebf8 00b31740 e06d7363 00000001 ntdll!_RtlRaiseException@4+0x0 (src\crt0.c:327)
     4260012ec48 0097039a e06d7363 00000001 00000003 0012ec74 kernel32!_RaiseException@16+0x0 (crt\src\crt0.c:327)
     4270012ec80 0096fe55 0012ec90 00aa0df4 00a458b4 00a4579c rosetta++.vc.boinc.release!_CxxThrowException+0x0 (crt\prebuild\eh\throw.cpp:166)
     4280012ec9c 0044365a ffffffff 0012edf0 00447308 ffffffff rosetta++.vc.boinc.release!operator new+0x1e (crt\src\new.cpp:63)
     4290012eca8 00447308 ffffffff 45ffa9ac 0012edf0 0012ed84 rosetta++.vc.boinc.release!ObjexxFCL::FArrayB::FArrayB+0x2a (rosetta++\objexxfcl\farrayb.hh:160)
     4300012ecd4 0049b234 0012ecf0 45ffa9f0 00000ece 00000001 rosetta++.vc.boinc.release!ObjexxFCL::FArray1D::FArray1D+0x38 (rosetta++\objexxfcl\farray1d.hh:145)
     4310012ed18 0049b44b 0012edf0 0012ed84 0012edc4 45ffa824 rosetta++.vc.boinc.release!ObjexxFCL::cross+0x0 (rosetta++\objexxfcl\farray1d.hh:772)
     4320012ee60 0049bf4a 45ffaa18 00000ece 00000002 00000001 rosetta++.vc.boinc.release!cross_benchmark+0x1a (rosetta++\boinc\boinc_rosetta_util.cc:257)
     4330012ef0c 006f0f85 00000002 006f0fd5 00000018 0012ef2c rosetta++.vc.boinc.release!start_boinc_init+0x5 (rosetta++\boinc\boinc_rosetta_util.cc:96)
     4340012ef14 006f0fd5 00000018 0012ef2c 001520a0 0012ef2c rosetta++.vc.boinc.release!main+0x0 (rosetta++\main.cc:109)
     4350012ff28 0097ab69 00400000 00000000 001520bf 0000000a rosetta++.vc.boinc.release!WinMain+0x0 (rosetta++\main.cc:433)
     4360012ffc0 77e523cd 00000000 00000000 7ffd8000 0000000f rosetta++.vc.boinc.release!__tmainCRTStartup+0x1c (crt\src\crt0.c:315)
     4370012fff0 00000000 0097abd2 00000000 78746341 00000020 kernel32!_BaseProcessStart@4+0x0 (crt\src\crt0.c:315)
     438}}}
     439::In the above example the new opterator was being requested to allocate 4GB of memory.  An out of  memory exception was thrown.
     440
     441
     442