Community
    • Login

    Debugging "Plugin Crash"

    Scheduled Pinned Locked Moved Notepad++ & Plugin Development
    csharpcrash
    14 Posts 2 Posters 8.2k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • shrout1S
      shrout1
      last edited by

      I’ve forked the XPatherizerNPP github project and it can be downloaded here:

      https://github.com/shrout1/xpatherizernpp

      Thank you for suggestion on the other plugin! XML Tools seems a bit unstable, also its XPath component doesn’t seem to work correctly. Attempting to evaluate “.” in a Microsoft sample XML file does not return any nodes… The plugin loads, but the XPath functionality doesn’t seem to work. All dependencies have been installed per the installation readme.

      Please let me know if there are any issues with my project upload; I have limited experience with git. I’ve spent a long time working IT but only dabbled with development.

      Thanks very much!

      1 Reply Last reply Reply Quote 0
      • shrout1S
        shrout1
        last edited by

        Stating what is probably obvious, it appears the the plugin infrastructure can’t handle the messaging protocols of the current version of Notepad++. I am trying to borrow newer implementations of the infrastructure from other plugins, though it will be patch work at best as I don’t understand most of the code I am looking at.

        1 Reply Last reply Reply Quote 0
        • chcgC
          chcg
          last edited by

          See https://github.com/kbilsted/NotepadPlusPlusPluginPack.Net for the current version also the files are splitted up more, but has nicer interfaces to access data.
          Have you checked if the 32bit build suffers from the same issues?

          1 Reply Last reply Reply Quote 0
          • shrout1S
            shrout1
            last edited by

            @chcg - I saw your update to the DLLexport folder; didn’t catch it before I made a new update:

            https://github.com/shrout1/xpatherizernpp/tree/Updated_Infrastructure/XPatherizerNPP

            I’m seeing a new error now: “XPatherizerNPP.dll just crashed in runPluginCommand(size_t i : 22)”

            Not a lot of reference material for that online.

            Otherwise I solved the SCNotification issues by remapping the main.cs calls to “ScNotification” in the Scintilla_iface.cs file, changed the “nc.nmhdr.code” calls to “nc.Header.Code” and redefined all the namespaces from “XPatherizerNPP” to “Kbg.NppPluginNET” and “Kbg.NppPluginNET.PluginInfrastructure”

            I borrowed from the https://github.com/kbilsted/NppPluginGuidHelper plugin and used all infrastructure there.

            Any suggestions are still appreciated!

            1 Reply Last reply Reply Quote 0
            • shrout1S
              shrout1
              last edited by

              Like to note that I only see the error “XPatherizerNPP.dll just crashed in runPluginCommand(size_t i : 22)” when I try to “Show XPatherizer Windows”

              1 Reply Last reply Reply Quote 0
              • shrout1S
                shrout1
                last edited by

                So it’s choking on the ScNotification messages when Notepad++ runs “UnmanagedExports.cs”. The form object is “null” and I’m not sure how it creates an instance of the form… It gets through line 66 of “UnmanagedExports.cs” when trying to load the form and crashes.

                1 Reply Last reply Reply Quote 0
                • shrout1S
                  shrout1
                  last edited by

                  I’ve not given up…

                  I discovered that the “Notification” routine in Main.CS is no longer triggered by UnmanagedExports.cs. I changed the function name to “OnNotification” and modified the argument to match the object being passed in from “beNotified” in the UnmanagedExports.cs callback.

                  This caused the event handler to correctly trigger when NPP finishes loading, initializing the search & result forms prior to them being called. The “XPatherizerNPP.dll just crashed in runPluginCommand(size_t i : 22)” error is now gone as it is not trying to load a null form object.

                  Now the problem is that the Scintilla interface does not appear to be returning the correct memory address for the file that is meant to be analyzed. From line 42 in NppPluginNETBase.cs:

                  Win32.SendMessage(nppData._nppHandle, (uint) NppMsg.NPPM_GETCURRENTSCINTILLA, 0, out curScintilla);

                  This returns an address that, when passed into “SciMsg.SCI_GETTEXT” returns a whole big bunch of gibberish (looks like Asian characters of some kind). Soooo I’m trying to figure out what’s going on with that. Slow progress! Learning as I go…

                  I’ve updated the code in the git repo: lhttps://github.com/shrout1/xpatherizernpp/tree/Updated_Infrastructure/XPatherizerNPP

                  1 Reply Last reply Reply Quote 0
                  • chcgC
                    chcg
                    last edited by

                    Did you build the plugin for 32bit and checked that it is working there as expected?

                    Additionally maybe remove the int casts in NppPluginNETHelper.cs from

                        public ClikeStringArray(int num, int stringCapacity)
                        {
                            _nativeArray = Marshal.AllocHGlobal((num + 1) * IntPtr.Size);
                            _nativeItems = new List<IntPtr>();
                            for (int i = 0; i < num; i++)
                            {
                                IntPtr item = Marshal.AllocHGlobal(stringCapacity);
                                Marshal.WriteIntPtr((IntPtr)(_nativeArray + (i * IntPtr.Size)), item);
                                _nativeItems.Add(item);
                            }
                            Marshal.WriteIntPtr((IntPtr)(_nativeArray + (num * IntPtr.Size)), IntPtr.Zero);
                        }
                    
                    1 Reply Last reply Reply Quote 0
                    • shrout1S
                      shrout1
                      last edited by

                      @chcg Thanks! I have changed the plugin to 32 bit.

                      I’ve actually got the SCI_GETTEXT working by utilizing the “ScintillaGateway” object as defined in the plugin infrastructure I’ve integrated.

                      It appears that the old “SciMsg.SCI_GETTEXT” was returning ASCII when I needed Unicode. The plugin infrastructure somehow resolves this, and I’m simply leaning on that to get it done.

                      Now my issue appears to be that the XML Nodes are being parsed incorrectly… The parent node is being listed as a child of itself in the output… I’m slowly digging through the source code to figure out what element is chopping up the XML.

                      Thanks for the help and suggestions! I’ve uploaded the new code to GIT again.

                      1 Reply Last reply Reply Quote 0
                      • shrout1S
                        shrout1
                        last edited by

                        Ok, I’ve merged the branch back into master and it seems like everything works… I don’t know what the XPML functionality is supposed to be, and without a working version I’m not sure how to troubleshoot it. I’ve removed the XPML options from the menu.

                        The functional 32 bit version of the plugin is available here:

                        https://github.com/shrout1/xpatherizernpp

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post
                        The Community of users of the Notepad++ text editor.
                        Powered by NodeBB | Contributors