OCC Crash while deployment to client's PC.

Hi All,

I am using OpenCascade(6.3.0)with Qt(4.3.2).It is working perfectly fine in my machine,I have to deploy this to client PC which may not contain OCC/Qt.
Using dependency walker I collected all the DLLs used by executable and kept it in the same folder(in executable folder 'bin').When I ran executable in a machine other than mine ,it is showing unusual behavior .Some times it run perfectly fine some time it is giving error(attached snapshot).

Can you please help me with this.

Thanks in Advance.
!nvincible

Attachments: 
Roman Lygin's picture

Impossible to say as this is a generic exception. Can likely be an issue in your own app logic (e.g. data race, etc).
Perhaps this post can be of some help - http://opencascade.blogspot.com/2009/03/distributing-your-software.html
Roman
---
opencascade.blogspot.com - the Open CASCADE blog
www.cadexchanger.com - CAD Exchanger, your 3D data translator

simple1238's picture

Hi Roman,

Thanks for you reply.
It may be the possibility(Application Logic),but I am not able to convince myself because it NEVER crashes in my PC and this behavior is also very much specific to only those PC which do not have Qt/OCC installed.

Is there something missing ? I do not know.

Roman Lygin's picture

Hi !nvincible,
Is your computer single CPU and your client's PC is multi-core and you use multi-threaded software algorithms ? Do you consistently use Microsoft run-time libraries between OCC, Qt, your own app and perhaps other 3rd part libs ? Do you redistribute MSFT run-times or do you rely that there are ones on customer machine (which can have different versions) ? All above + disk space, memory size and myriads of other issues can be root-causes...
If you used assert() in your code you could ship debug libraries to identify at least the place in your code where the crash happens. Or enable other techniques (like logging, etc).
Hope this helps.
Roman

simple1238's picture

Hi Roman,

I found that client's PC is 64bit and has 4 processors ,mine is 32bit and 2 processors and yes my application contain one thread (other than GUI thread) ,I have installed Opencascade for 32bit version from

http://www.opencascade.org/getocc/download/loadocc/

I have shipped all the DLLs of 32 bit to run the executable,am I doing some serious mistake? because it was working perfectly fine earlier with same DLLs .

simple1238's picture

One more question. Do we have OCC for 64 Bit PC also or this version will work perfectly fine?

Roman Lygin's picture

32 bit app should work fine on 64bit system.
If your code reserves 1 thread for GUI and uses remaining for computations it obviously may behave differently on 2 and 4 core machines.
To check if your code has thread-specific errors you may try Intel Parallel Inspector, part of Parallel Studio (http://www.intel.go/parallel). I have been using it extensively myself and recommend it (not just because I'm part of its development team).

Make sure you use a debug version of your app built with /Zi and /DEBUG options. Just supply a representative case which in normal case would run for 5-15secs (the latter is helpful as Inspector adds considerable overhead). Select Thread Checking analysis type (Level 2 to 4).
Hope this helps.
Roman
---
opencascade.blogspot.com - the Open CASCADE blog
www.cadexchanger.com - CAD Exchanger, your 3D data translator

Stephane Routelous's picture

i don't remember what information it gives in release, but you can try to run the profiler of "dependency walker"
http://dependencywalker.com/

it often did give me information to track what went wrong on other computers than mine

HTH

Stephane