08-29-2019 03:36 AM
I have a LabVIEW 2017 built executable which runs continuously on our test set. Other LabVIEW 2012 VI's interact with this executable via TCP/IP Localhost.
Problem is, every so often, the executable crashes with an Access Violation (0xC0000005) and a EIP address?
The executable contains a third party library and some wrapper LabVIEW code for the TCP/IP bits (to make the 3rd party library more friendly).
I am not sure where the crash is happening! Is there a tool that I can pass the exe file to and the EIP address and it will say the crash is occurring in VI so 'n so? Or is there a tool I can run along side the executable to catch the crash?
Installing LabVIEW 2017 development on the test set is not an option as it will "damage" the LabVIEW 2012 installation.
Thanks.
08-29-2019 05:29 AM
You can build the executable in Debug mode and remote connect to the VI to follow the flow in real time.
/Y
08-29-2019 05:40 AM
Is this third party library DLL based?
08-29-2019 05:47 AM
@rolfk wrote:
Is this third party library DLL based?
No. It's all LabVIEW 2017 VI's and FPGA Code. Looking at the other files in the dump log there is a text file called "lvlog.txt" this has a call tree of the VI's when the crash occurred. The crash did happen in one of the third party library VI's. I just don't know why. It is intermittent too. So the same VI ran fine for 15 minutes (and over 100 calls). I have contacted the third party company for suggestions.
Thanks.
08-29-2019 06:14 AM
@ChristopherPovey wrote:
@rolfk wrote:
Is this third party library DLL based?
No. It's all LabVIEW 2017 VI's and FPGA Code. Looking at the other files in the dump log there is a text file called "lvlog.txt" this has a call tree of the VI's when the crash occurred. The crash did happen in one of the third party library VI's. I just don't know why. It is intermittent too. So the same VI ran fine for 15 minutes (and over 100 calls). I have contacted the third party company for suggestions.
Thanks.
A classical problem is opening a new connection with every call instead of reusing some reference. Tell us what you find out.
/Y
08-29-2019 07:15 AM
@Yamaeda wrote:
@ChristopherPovey wrote:
@rolfk wrote:
Is this third party library DLL based?
No. It's all LabVIEW 2017 VI's and FPGA Code. Looking at the other files in the dump log there is a text file called "lvlog.txt" this has a call tree of the VI's when the crash occurred. The crash did happen in one of the third party library VI's. I just don't know why. It is intermittent too. So the same VI ran fine for 15 minutes (and over 100 calls). I have contacted the third party company for suggestions.
Thanks.
A classical problem is opening a new connection with every call instead of reusing some reference. Tell us what you find out.
/Y
Possibly. Unfortunately the VI in question is protected so I don't know what is going on inside it! 😞
08-30-2019 10:41 AM
I would use the desktop execution trace toolkit (DETT)
https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z000000P9vgSAC&l=en-US
08-30-2019 11:36 AM
Is the dll thread safe?
The wrapper may help avoid multiple calls when in the 2017 environment but from the older 2012 environment... not so much.
Another out there thought...
VI server can invoke VI served from an exe can (in theory) span LV versions.
Serving up and doinga Call by Referecne of an action engine that wraps up the dll in the 2017 version to the 2012 version can ensure the dll is not being invoked from more than one place at one time.
Ben
08-30-2019 01:06 PM
Are you able to attach any of the crash reports (the .zip files generated)?
09-02-2019 01:40 AM
@bean123 wrote:
I would use the desktop execution trace toolkit (DETT)
https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z000000P9vgSAC&l=en-US
Will this work across versions? So if I build the executable in LabVIEW 2017 will the LabVIEW 2012 Desktop Execution Trace Toolkit monitor it?
I don't really want to contaminate the target set up with the LabVIEW 2017 development system.
Thanks.