Memory objects getting lost

I understand that it can’t be read if it is closed. 3 times now I’ve found that the list in the overview isn’t found even though the overview window is open and displaying entries.

My solution doesn’t use the Sanderling UI. It just loops looking for the overview list element, even when docked, and occasionally changing overview tabs while a measurement might be taken at the same time. If the overview list is found then the bot should be in space, else no overview list means it should be docked. However, if it is in space and Sanderling can’t find the overview list, then I can’t tell it to dock because no lines means no stations to dock with.

It is easy to check if the ship is in space and the overview list element isn’t being found anymore. The problem is what to do once this has happened, because the problem is persistent.

@Viir
Okay, I just caught it and I did my best to document what is going on. (For some reason my VM environment wouldn’t allow me to save a memory measurement to a file. I followed the video and dragged the text file over the File button, but the mouse icon stayed on the No image and dropping the file on the button did nothing. I even tried the latest version of Sanderling. I try to run my VMs very lean, but if you can point to something I need to enable I’ll gladly do it.)

The issue (this time) was that it stopped finding the Module element persistently. Persistent to the point that it persisted through restarting Sanderling. (I even downloaded and tried the latest UI version.) I tried docking and undocking then restarting the latest Sanderling UI, but no change. The only thing that fixed the issue was closing/restarting the eve client and then starting Sanderling again.

SanderlingMissingModules2

In this case, I recommend to test reproducing the problem using a process measurement of the eve online client.

With the Demo_memory_reading_from_process_sample method, you should be able to get the same Sanderling memory measurement from the saved process measurement.

Thank you. I was running the processes as admin, so that explains why the drag/drop didn’t work. I will try this next time it occurs. Thank you.

Okay, found this happened again with a different UI element. Downloaded the tool and tried it but was ultimately successful because the Eve client is run as admin. Running as admin, about my 3rd admin attempt the measurement was successful, but I couldn’t drag a folder/file onto the spot because everything was run as admin, which is the same problem as before.

Is there a way to just have it create a new folder or something (even if in folder the tool is started in)?

Or can you send me an EXE or tell me the code to run to write to the folder that the application is running from?

Edit: here’s some more info. The Eve client is started by a script that is run as admin, meaning that I’m unable to run the tool from the same parent process, so even running as admin doesn’t work for drag and drop.

I found what seems like a workaround to getting a snapshot, but am busy. Will post it sometime today.

I was able to do it the way detailed in the How to collect samples for memory reading development thread. The trick is to open Notepad as admin, and File->Open within it. Within the Open window drag the file/folder. The result seems to be about 250mb, so I will upload that soon with an explanation of what is missing from the snapshot.

The trick allowed me to drop a txt file into the Sanderling Exe, as detailed in How To Save A Memory Measurement To A File, but it generated an error that I’ll send (with log) when I get home this evening.

@Viir I have sent you a PM with the example memory snapshot I was able to get, as well as the error I mentioned in the post above.

I doubt this works with the current binaries. But when making a change to the source code, why not.

I don’t know of such an EXE.

I have downloaded a file with SHA1 of 25B0FB541006BC6E96BE9016BE205260550B8FFE. I will take a look at it.

I just messaged you with another example where the “measurement?.Value?.WindowOverview?.FirstOrDefault()?.ListView?.ColumnHeader” element is missing even though it is shown in Eve. Again, restarting Sanderling, or using different versions, does not fix the issue. The Eve client must be restarted.

Good, having two examples might make it easier find the problem. I will take a look at the examples next week.

Just a friendly bump. Something like this happened twice today.

I am looking at sample 25B0FB541006BC6E96BE9016BE205260550B8FFE:

I used this sample with Demo_memory_reading_from_process_sample and a memory measurement was read from the sample. I see an object referenced by the local memoryMeasurement. Do you see a different result?

I am testing sample 05B7534F1DE715DB35F4E8EF5F37356C96218ABC with Demo_memory_reading_from_process_sample:
Translated to this environment, I guess the path you mentioned is memoryMeasurement?.WindowOverview?.FirstOrDefault()?.ListView?.ColumnHeader, is that correct?

Visual Studio shows me a Value of {Sanderling.Interface.MemoryStruct.IColumnHeader[3]} for the expression of that path. Not sure where Visual Studio takes Value from, my guess is ToString. Do you see a different result?

I’m not sure if you’re saying there’s a problem with the first example:
I was able to do it the way detailed in the How To Save A Memory Measurement To A File thread. The trick is to open Notepad as admin, and File->Open within it. Within the Open window drag the file/folder. The result seems to be about 270mb, so I will upload that soon with an explanation of what is missing from the snapshot. SanderlingGUIReadErrorMeasurement.zip

Even after restarting Sanderling the following element was not being found: ShipUI.SquadronsUI.SetSquadron[1].Squadron.LabelText
It should say “Ready” because it is not in space. And you can see where the others say “In Space” in .SetSquadron[0 and 2]. However, the GUI shows nothing even after restarting it. I have to restart the Eve client for it to start being found again. This occasionally happens to other elements.

In the second example (using the same method given in How To Save A Memory Measurement To A File) where the “measurement?.Value?.WindowOverview?.FirstOrDefault()?.ListView?.ColumnHeader” element is missing. Missing ColumnHeader Element. It should have multiple children, one for each header column.

Alright, I spent some more time on this and there is some progress: I see a new approach to adapt the code to help find the elements. Looks like there will soon be an app for you to test with.

2 Likes

Awesome!!! Can only click the love button once, sad.

I invested four hours into this today.
As a result, there is a new tool to find objects in memory measurements:
https://github.com/Arcitectus/Sanderling/commit/b0f73f76ae246b3322d10b7c3abbf35badb25c36

From the apps output, it seems like there is an improvement:

Welcome to the Sanderling process measurement explorer.
Available commands are:
----
Command 'load-process-measurement-from-file':
Load a process measurement from the given file path.
----
Command 'read-memory-measurement-from-process-measurement':
Read a sanderling memory measurement from the currently loaded process measurement.
----
Command 'explore-memory-measurement':
Explore the sanderling memory measurement at the given path.
----
>load-process-measurement-from-file "C:\Users\John\Desktop\demo-sanderling\2018-07-10.MeasurementNoColumnHeader.zip"
Loaded process measurement with SHA1 of 05B7534F1DE715DB35F4E8EF5F37356C96218ABC
>read-memory-measurement-from-process-measurement
memory measurement read succesfully
567 UIElements found.
>explore-memory-measurement .WindowOverview?.FirstOrDefault()?.ListView?.ColumnHeader
Object found at path '.WindowOverview?.FirstOrDefault()?.ListView?.ColumnHeader':

Sanderling.Interface.MemoryStruct.IColumnHeader[]
Type.FullName: Sanderling.Interface.MemoryStruct.IColumnHeader[]
----
Properties of this object:
-
Length: 3
LongLength: 3
Rank: 1
SyncRoot: Sanderling.Interface.MemoryStruct.IColumnHeader[]
IsReadOnly: False
IsFixedSize: True
IsSynchronized: False
>

I uploaded the executable binary at https://nofile.io/f/DnJDAtoKXbo/2018-07-25.Sanderling.ExploreProcessMeasurement.Debug.zip

1 Like

Thank you very much. I just want to make sure I understand.
This new tool looks like it allows for easier memory exploration from multiple input sources.

What was improved? I looked at the July Sanderling release and couldn’t tell if it was enhanced to be able to find elements when they are lost, like my examples?

I’m guessing that the bot could check “IsSynchronized” to see if there’s an error. But, can anything be done to synchronize the element after it returns false?