sgxTools

admin의 아바타

http://www.osn.de/user/finzel/html/sgxTools.html

sgxTools는 Tcl 스크립트 오류 체크 툴로써 Tcl 스크립트의 잠재적인 버그를 동적으로 체크하는 대단히 유용한 툴입니다. Windows/Unix/Linux에서 사용 가능하며, Tcl/Tk8.0 이상에서 사용가능 합니다. sgxTools는 아래의 툴로 구성됩니다.

  • sgxXP - 코드 프로파일
  • sgxCT - 코드 트레이스
  • sgxRSM - 리소스 측정
  • sgxTVC - 변수 정합성 테스트
  • sgxDbg - 디버그 프로시져

sgxCP

Tcl 스크립트를 프로파일하는 툴 입니다. 아래의 예는 demo.tcl 파일을 프로파일합니다.

package require sgxCP
::sgxCP::init
source demo.tcl
puts stderr [::sgxCP::print]

프로파일의 결과는 프로시져 마다 출력 됩니다. 프로시져의 콜(call) 횟수와 실행시간이 표시됩니다. 마지막으로 한번도 사용되지 않은 프로시져도 표시 해줍니다.

Profiling information for ::pong 
------------------------- 
             Total calls:  3 
    Caller distribution: 
                           3     ::ping 
           Compile time:  14166 
           Total runtime:  43629 
        Average runtime:  14543 
           Runtime StDev:  367 
         Runtime cov(%):  2.5 
   Total descendant time:  42594 
Average descendant time:  14198 
Descendants: 
                          3     ::ping 

Never used:     1 proc(s) 
        ::pongping

sgxCT

Tcl 스크립트를 트레이스를 하기위한 툴입니다. 아래의 예는 demo.tcl 파일을 트레이스 합니다. 정규표현을 사용하여, 트레이스하고 싶은 프로시져를 정의하는것도 가능합니다.

package require sgxCT
::sgxCT::Init {p.*g} stderr

source demo.tcl
::sgxCT::Summary {p.*g}

트레이스의 결과로 프로시져의 콜과 리턴의 관계가 출력됩니다. 프로시져의 네스팅(nesting) 레벨, 인자, 리턴값이 표시됩니다. Summary는 프로시져의 콜횟수와, 호출의 관계가 표시됩니다.

# Call Trace    regexp: 'p.*g' 

mode    level   proc    args/return 
call    1       ::pingpong 
call    2       ::ping  1 
call    3       ::pong  1 
call    4       ::ping  2 
call    5       ::pong  2 
call    6       ::ping  3 
call    7       ::pong  3 
call    8       ::ping  4 

         BANG    4 

return  8       ::ping  BANG 
return  7       ::pong  3 
return  6       ::ping  3 
return  5       ::pong  2 
return  4       ::ping  2 
return  3       ::pong  1 
return  2       ::ping  1 
return  1       ::pingpong      1 

# Call Trace Summary    regexp: 'p.*g' 

         # called: 
        4       ::ping 
        1       ::pingpong 
        3       ::pong 

         # caller: 
        4       ::ping 
        1       ::pingpong 
        3       ::pong 

         # callings: 
        1       ::ping          ::BANG 
        3       ::ping          ::pong 
        1       ::pingpong      ::ping 
        3       ::pong          ::ping 
        1       ./test/test_ct.dat        ::pingpong 

         # unused: 
        0       ::pongping

sgxRSM

Tcl 스크립트의 리소스를 측정하는 툴입니다. 아래의 예는 demo.tcl을 측정합니다.

package require sgxRSM
::sgxRSM::_Files_ demo.tcl

측정 결과는, 커맨드와 프로시져 콜 횟수가 프로셔져 마다 출력됩니다. 마지막의 summary로는 커맨드의 프로시져 콜 총 횟수가 표시됩니다.

# ------------------------------------------------ 
Proc :   test_tvc 
FPM  :   3   FRPM :   1   FC   :   22 
LOC  :   142   eLOC :   57   SCUM :   149.1% 

Calls:   62 
   3   append 
   1   array 
   3   break 
   1   expr 
   1   for 
   3   foreach 
   3   global 
   1   if 
   2   incr 
   1   info 
   3   lappend 
   4   list 
   1   regexp 
   1   regsub 
   1   return 
   1   scan 
   16   set 
   1   string 
   7   subst 
   3   unset 
   2   upvar 
   3   variable 
# ------------------------------------------------

sgxTVC

Tcl 스크립트에 사용된 변수의 정합성을 테스트하는 툴입니다. 아래의 예는 demo.tcl 파일을 테스트합니다.

package require sgxTVC
::sgxTVC::_Files_ demo.tcl

테스트 결과는, 에러와 경고가 있는 변수의 리스트가 출력됩니다.

test_tvc   error   undef_14   variable undefined used by incr 
test_tvc   error   undef_15   variable undefined used by unset 
test_tvc   error   undef_16   variable undefined used by array 
test_tvc   error   undef_17   variable undefined used by info 
test_tvc   warning   append   bad style variable 
test_tvc   warning   lappend   bad style variable 
test_tvc   warning   incr   bad style variable 
test_tvc   error   unused_01   variable undefined used by append 
test_tvc   error   unused_02   variable undefined used by lappend 
test_tvc   error   unused_00   argument unused 
test_tvc   error   proc   argument unused 
test_tvc   warning   proc   bad style argument 
test_tvc   error   append   variable unused 
test_tvc   warning   append   bad style variable 
test_tvc   error   lappend   variable unused 
test_tvc   warning   lappend   bad style variable 
test_tvc   warning   set   bad style variable 
test_tvc   error   incr   variable unused 
test_tvc   warning   incr   bad style variable