Displaying the Line Number during the execution of a Pick Basic Program in uniVerse

145 views Asked by At

I am utilizing Pick Basic on the uniVerse operating system. Many times, I will need to watch a variable change during a debugging session. I will locate the variable throughout the program and note every time it can possibly be modified. I will then go into the program and during its execution, I have the program display the value of the variable on the screen along with the line number of the source code. For argument's sake, let us say that the variable name is begdate and in this case, on line 146, I set it to today's date. I will add the proceeding line:

146: begdate = DATE()

147: DISPLAY "Line 147: ":OCONV(begdate,"D4-")

This works just fine. But, if the program can possibly change this variable on many different lines, once I start adding or subtracting lines to the source code, the display is usually not displaying the correct line number anymore because the line number is hardcoded.

Does Pick Basic have any system variable that captures the line number of the source code so that:

  1. I do not have to keep going back and changing the hardcoded line number and better yet,
  2. I do not have to hardcode the line number at all.
1

There are 1 answers

1
TonyG On

The answer to this is in the UniVerse BASIC User Guide V11.3.4: https://docs.rocketsoftware.com/bundle/UniVerse_BASICUserGuide_V1134/resource/UniVerse_BASICUserGuide_V1134.pdf Ref page 63 on Debugging Tools (RAID) and the M command to set watchpoints on variables.

A watchpoint condition occurs when RAID monitors a variable until the variable’s value changes. The program then suspends operation and displays the variable’s old value, its new value, and the source instruction that caused the change to occur

The command is entered at the :: prompt, within the debugger. You can enter the debugger with a DEBUG statement in your code or by breaking into it at runtime. You can also use the command RAID BP ProgName.

Another way to go about this is to compile with -X option so that you can get see where variables are referenced. See page 35 from above.

When I debug like this in BASIC, I tend to use names, not line numbers, to indicate what the code is doing, not where it is. So the code would look more like this:

147: DISPLAY "Initializing Beginning Date: ":OCONV(begdate,"D4-")

Now the line can move and you'll still be able to find it easily with the unique text. You can also use simpler unique text like this:

147: DISPLAY "BEGDATE_INIT: ":OCONV(begdate,"D4-")

Use whatever pattern seems comfortable.

Be sure begdate isn't EQUated to a dynamic element or some other variable. If, for example, EVENT<3> is equated to begdate the debugger tracing the specific variable name might not pick up on EVENT<3> or EVENT<Beginning_Date> being modified.

I am not aware of a specific @VAR or other runtime mechanism in UniVerse that will return the currently executing line number back to the BASIC code so that you can DISPLAY "Current line is ":@LINE.
In D3 I peeked into the local workspace and the current stack trace.
Someone with more current UniVerse expertise might be able to cite a specific function, @VAR, user exit, or other mechanism for this. It's possible that the feature you're looking for is only available in a later platform.

Rocket Support will help with this question : Support Agreement should not be necessary to ask a simple question like this. If that's not an option, check the forum on the Rocket site, or one of the community forums. I can provide links if required.