API Bugs

by Solution Partner Phenom Solution Partner Phenom ‎08-03-2015 07:36 AM - edited ‎08-03-2015 08:40 AM (1,951 Views)

Finding causes of bugs can be a daunting task. Spy for Solid Edge is a wonderful tool but it had an annoying issue in that it caused Solid Edge to display a "Read-Only Status Indicator" on documents. I have spent so much time thinking that it was a .NET\COM Interop issue. Countless hours debugging, head scratching and profanity filled screaming matches with myself. I'm so happy to tell you that the bug has been fixed in the latest release. I also wanted to share with you what caused the issue and how I went about finding it.

 

I've known about the "Read-Only Status Indicator" issue for quite some time now. Actually, I knew about it when I released the application. I moved forward with the release because I felt like the benefits of the application outweighed the cons, issues and all. The following image shows the problem and skips ahead of my post to tell you what caused it.

 

 

That "Read-Only Status Indicator" icon on the top right is the problem and Spy for Solid Edge was seemingly causing it. Well, it was but indirectly. You see, Spy for Solid Edge is a very intrusive application in that it calls APIs that most normal people don't. It works that way in order to display information to the user. What I found after hours and hours of debugging and thinking it was a bug in my code was that a call like this:

 

class Program
{
    [STAThread]
    static void Main(string[] args)
    {
        var application = SolidEdgeUtils.Connect();
        object value = null;
        var parameter = SolidEdgeFramework.ApplicationGlobalConstants.seApplicationGlobalOpenAsReadOnly3DFile;
        application.GetGlobalParameter(parameter, ref value);
    }
}

causes Solid Edge to display the "Read-Only Status Indicator". As a sanity check, I verified the bug using native C++ as well. I have tested all of the ApplicationGlobalConstants and 

seApplicationGlobalOpenAsReadOnly3DFile is the only one that causes the bug. For now, Spy for Solid Edge will skip that particular global constant in order to avoid the issue.

 

One of the most common questions I get asked is how do I find the cause of bugs like this. This is a very real-world example of the types of issues that you all encounter every day when trying to automate Solid Edge. My single best tip for this kind of stuff is process-of-elimination. Spy for Solid Edge is a rather large and complex application. It has a lot of moving parts and is trying to do more than most automation type applications. My final solution for this particular problem was remarking out code and narrowing it down to the API call(s) that were leading to the issue. That may sound easy at glance but in a large application, where do you start? The answer is, it depends. Cliche I know but for me, experience gives me insight into where I think the problem is.

 

So what do we as users do when we find API bugs? I immediately filed an Incident Report (IR) with GTAC. Incident Reports are the proper approach for us, as users, to communicate with the Solid Edge development team. I will also receive status updates via email as they process the IR. Also, by communicating the bug to development, we're saving future API users from having to experience the bug.

 

As a result, I have released Spy for Solid Edge 2.5 on CodePlex. If you already have the application installed, you should get prompted to upgrade on application startup. Happy coding!

Comments
by Solution Partner Genius Solution Partner Genius
on ‎08-04-2015 03:02 AM

Thanks for this update Jason.

by Experimenter
on ‎06-29-2017 05:25 PM

The "Read Only" bug is back. I don't run Spy for Solid Edge. I am am the Lead Designer and SE administrator for our company and this is occurring on my i7 Win10 mobile workstation machine, my home Win7 desktop and on my assistants i5 Win10 desktop. Do you have any suggestions on what is causing it and how to resolve it. It is quite annoying. Requires a stop exit and openning of the file about every 15 minutes.

Thanks!

John

Labels