以下是我的代码的重要部分:
set message_initialization_result ""
proc logMessage {msg} {
upvar outputtext outputtext
if { [string length $outputtext] > 0 } {
if { [string length $msg] > 0 } {
$outputtext insert end $msg
$outputtext insert end "\n\n"
}
}
}
proc handler { sock type msg } {
upvar outputtext outputtext
upvar message_initialization_result message_initialization_result
if {[catch {
switch -glob -nocase -- $type {
co* {
logMessage "Connected on $sock"
}
te* {
logMessage "Received:\n$msg"
}
cl* -
dis* {
logMessage "Disconnected"
}
}
}]} {
set message_initialization_result "$message_initialization_result handler"
}
}
set sock [::websocket::open ws://127.0.0.1:10010 handler]
...
logMessage $message_initialization_result
outputtext
是一个包含文本小部件的变量。
如何让处理程序将收到的消息打印到该文本小部件?
我怎样才能检查这个处理程序是否被调用?我尝试引发错误,但似乎它们都被websocket库中的catch
捕获。
答案 0 :(得分:1)
我为后代收集了几点......
puts [info level 0]
添加到要跟踪的过程的开头。通过这种方式,您可以在每次调用过程时看到它以及它收到的参数。puts
的输出,请尝试使用{{打开Tk控制台1}}。console show
,则命令fileutil
非常适合光记录。查看命令的选项。::fileutil::appendToFile log.txt $msg
?试试fileutil
。每次打开和关闭文件都会使文件保持刷新状态,这意味着您不需要那么多的侵入式注入和同步。文档: close, console, fileutil (package), info, open, puts, set