Property visibility behaves as hidden when using breakpoints and "property acces list"

9 views (last 30 days)
Dear Matlab Community,
I am currently working on a project using classes for which I need to restrict the accessibility of certain properties to a set of classes. To check the value of these properties, I typically place a breakpoint in one of the methods of one of the classes having access to one of these properties. When "in the method", the value of the said property can be accessed from the terminal, showing that the access is well granted to the class the breakpoint is in. Nevertheless, the property cannot be seen when opening the instance in the workspace panel.
Here is a small demo:
BaseClass is used to provide accessibility
classdef BaseClass <handle
end
MainClass stores a property:
classdef MainClass < BaseClass
properties (GetAccess=?BaseClass,SetAccess=immutable)
Property1
end
methods
function obj = MainClass(inputArg1)
obj.Property1=inputArg1;
end
end
end
ParentClass is a subclass of BaseClass and stores a MainClass instance
classdef ParentClass < BaseClass
properties
child MainClass
end
methods
function obj = ParentClass(child)
obj.child = child;
end
function testMethod(obj)
end
end
end
Instances of the classes are then created:
my_main=MainClass(5)
my_parent=ParentClass(my_main);
Now, the property cannot be accessed from the terminal, as expected:
my_parent.child.Property1
But a breakpoint can be placed in the testMethod of the ParentClass. There the property is accessible
But not "visible":
It appears that the property access behaves as "Hidden" when in a method of a class listed in the Property Access List. I could not find any information in the documentation on this behaviour. Is there any option to make such properties visible when "in a method" using a breakpoint? It would be very convenient for debugging purposes.

Answers (1)

Prateekshya
Prateekshya on 10 Aug 2023
As per my understanding, within the "testMethod" function, you can see the value of Property1 in the Command Window but not in the Workspace. Assuming that we cannot modify the class definitions and access lists, one possible solution is to use the "assignin" function to store the value of Property1 in a variable in the workspace of your choice.
Here's an example that demonstrates how to achieve this:
function testMethod(obj)
assignin('base','temp',obj.child.Property1);
end
In this code, the assignin function is used to store the current value of Property1 from the obj.child object into a variable named 'temp' in the base workspace. You can adjust the workspace name as well as the function inside which you will add this line of code as per your requirement.
By executing this line within your method, the value of Property1 will be accessible outside the method in the specified workspace. You can then access and use the stored value as needed in your MATLAB code.
For further information on the "assignin" function, you can refer to the MATLAB documentation: https://in.mathworks.com/help/matlab/ref/assignin.html
  1 Comment
Théophane Dimier
Théophane Dimier on 10 Aug 2023
Thank you for taking time to find a workaround, I very much appreciate the effort!
I actually got in contact with the support of Mathworks after my original post and it appears that the behaviour I described was never intended. For this reason, an upgrade of this behaviour has been added to the suggestion list for the development team.

Sign in to comment.

Categories

Find more on Customize Object Indexing in Help Center and File Exchange

Products


Release

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!