System Type Debugging
What dynamics are set????
This is a good snippet of code to determine what dynamics are set when your code is executed…
How did I get here???
You can call a traceback in any method to figure out how you got there.
In 4.x, when you load the developer application, the traceback will be shown with numbers. You can get a handle on the specific call by using the global !ts![x], where x is the traceback number you are interested in. Note !ts! is overwritten on every traceback, so do a !cts! « !ts!.copy() before doing anything.
When you get a handle on the traceback line you are interested the object to which the method was called upon can be retrieved using !cts![x].receiver. And, the arguments for that method is !cts![x].arguments.
Debugging Framework & Databus
Do you need to figure out what is going on within a framework or application?
Reporting Bad Performing Consumers
Compile the following in and set your time threshold in seconds. You can use -1 to report everything going on… Once you determine your bad performer, look at sw_databus_data_available() on that consumer.
Service Providers
Do you need to know what service providers exist? A service provider is a simple way of getting to common plug-ins like maps (aka map_plugin). To get the list you can do the following.
Method Table
The exemplar.method_table gives you the details behind the inheritance of exemplars that you can use.
Find all Children
Here is an example of finding all exemplars that inherit from vtk!qa_script who has type_of_input set to :geometries
System Resources & Messages
- smallworld_product.report_resource_loading? « _true
- message_handler.trace_level « 3
Threads & Thread Management
There is a thread manager in the 4.x core development tools application. However sometimes it cannot be brought up, so you need to access and kill a thread on the Magik prompt…
Getting List of Threads
!t << rope.new_from_iter(system,:known_threads|()|)
Sending Error to Thread
Using a thread from above, you can run this to send an error to the thread. This is good because it will throw a traceback so you can see where things are getting stuck…
!t[5].condition_interrupt(:error)
"Common" Errors
Ok, maybe not "common" but some errors and potential fixes…
- There is no package called… probably a misplaced colon… like map_trail_plugin:activate_trail_properties_dialog() (colon should be period. PERIOD!)