Netbeans Support for Tcl

Check-in [0db6cfc1ab]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Added support for breakpoints in debugServer.tcl.
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 0db6cfc1ab7ae3e9a24a9b354bec680b3d36b599
User & Date: dmp 2011-08-05 09:59:57
Context
2011-08-05
14:35
Breakpoints are working. User interface and debugServer.tcl work as expected. check-in: ba318ba05c user: dmp tags: trunk
09:59
Added support for breakpoints in debugServer.tcl. check-in: 0db6cfc1ab user: dmp tags: trunk
2011-07-30
11:57
Fixed debugServer.tcl. Protocol is newline-based, so newlines are filtered now: [ string map {"\n" "\\n"} $value ] . check-in: 0e319d4b5c user: dmp tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to TclPlugin/src/org/netbeans/modules/languages/tcl/debugger/resources/debugServer.tcl.

1
2
3
4
5
6
7
8
9
10
11
12
13




14
15
16
17
18
19
20
#!/usr/bin/env tclsh

# Created during Google Summer Of Code 2011.
# For Tcl/Tk Community by student Michał Poczwardowski
# License: BSD

# Debug Server for Netbeanstcl

namespace eval ::debug {

  set doNotWait 0
  set stepOverLevel -1
  




# execution args:
  variable portNumber
  variable tclScript
  variable currentDirectory

# setData variables
  variable fileName












|
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/env tclsh

# Created during Google Summer Of Code 2011.
# For Tcl/Tk Community by student Michał Poczwardowski
# License: BSD

# Debug Server for Netbeanstcl

namespace eval ::debug {

  set doNotWait 0
  set stepOverLevel -1

# breakpoints:
  set breakpointsStatus 0
  variable breakpoint

# execution args:
  variable portNumber
  variable tclScript
  variable currentDirectory

# setData variables
  variable fileName
114
115
116
117
118
119
120























121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139


140
141
142
143


144
145
146
147
148




















149
150
151
152
153
154
155
	}

	setData
   	puts stderr ">>> \[ $cmdStr \]"

	while { true } {
	























		if { $debug::stepOverLevel != -1 } {
			# Now step everything, till next equal or lower stepOverLevel
			if { $debug::stepOverLevel < $debug::infoFrame } {
				break
			} else {
				# Make stepover inactive
				set debug::stepOverLevel -1
			}

		}	
			
		set operation [gets $debug::socketFd]
   		puts stderr ">>> operation: $operation"

		switch $operation {
		   status {
			sendData
		   }
		   step {


			# break here allows to do next step
			break
		   }
		   stepover {


			# If there is no stepover active:
			if { $debug::stepOverLevel == -1} {
				set debug::stepOverLevel $debug::infoFrame
				break;
			}




















		   }
		   exit {
			close $debug::socketFd
			exit
		   }
		   default {
			puts $debug::socketFd "Invalid command."







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>



















>
>
|



>
>





>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
	}

	setData
   	puts stderr ">>> \[ $cmdStr \]"

	while { true } {
	
		if { $debug::breakpointsStatus != 0 } {
			set breakpointReached 0
			
			# Step everything, till next breakpoint
			if { [info exists debug::breakpoints($debug::fileName)] } {
				#puts "breakpoint In THIS LAP"
				set lines $debug::breakpoints($debug::fileName)
				foreach line $lines {
					if { $line == $debug::lineNumber } {
						set breakpointReached 1
						puts " >> reached breakpoint file $debug::fileName line $line" 
					}
				}
			}

			if { $breakpointReached == 0 } {
				#puts "BOX NOT this lap"
				return
			}
		} 

		# Perform single stepping…
		
		if { $debug::stepOverLevel != -1 } {
			# Now step everything, till next equal or lower stepOverLevel
			if { $debug::stepOverLevel < $debug::infoFrame } {
				break
			} else {
				# Make stepover inactive
				set debug::stepOverLevel -1
			}

		}	
			
		set operation [gets $debug::socketFd]
   		puts stderr ">>> operation: $operation"

		switch $operation {
		   status {
			sendData
		   }
		   step {
			# Activate single stepping mode.
			set debug::breakpointsStatus 0
			# Break here allows to do next step.
			break
		   }
		   stepover {
			# Activate single stepping mode.
			set debug::breakpointsStatus 0
			# If there is no stepover active:
			if { $debug::stepOverLevel == -1} {
				set debug::stepOverLevel $debug::infoFrame
				break;
			}
		   }
		   breakpoints {
			set number [gets $debug::socketFd]
			set count 1
			#puts "Breakpoints: $number"
			while { $count <= $number } {
			#	puts ">>> $count"
				set breakpointFileName [gets $debug::socketFd]
				set breakpointFileLines [gets $debug::socketFd]
				set ::debug::breakpoints($breakpointFileName) [lsort -integer $breakpointFileLines]
			#	puts ">>> set $breakpointFileName:($breakpointFileLines)"
				incr count
			}
			set debug::breakpointsStatus 1
		   }
		   continue {
			# Run till next breakpoint
			set debug::breakpointsStatus 1
			# Do next step
			break
		   }
		   exit {
			close $debug::socketFd
			exit
		   }
		   default {
			puts $debug::socketFd "Invalid command."