略過巡覽連結首頁 > 產品與服務 > 技術分享

技術分享

[產品介紹] NSK multithread debug

作者/黃俊源
作者簡歷

作者現職凌群電腦NSK服務處總工程師,主要負責台灣證券交易所交易系統與維運系統、NonStop系統維運服務。專長為HPE NonStop系統、系統整合、系統網路監控管理。

前言

NonStop 從H06.21或J06.10之後版本及L系列的版本,OSS便支援POSIX User Thread,OSS process可以借此啟動multithread作程式的處理與控制,基本上每個thread具備自己的register及execution stack。以往針對OSS multithread process作debug時,無法於過程中隨意切換不同thread的運作,往往造成程式在測試除錯過程中,需要加入額外訊息紀錄以供判斷及分析;目前從L19.08之後版本,native inspect針對OSS multithread新增關於multithread process的除錯機制,本文件將針對此次新增功能作說明。

功能說明

於L19.08之後,native inspect新增下列的指令與功能,以便用於OSS multithread process的環境;這部分是用於online process debug以及saveabend file除錯,新增功能包含thread切換設定、thread資訊查看、thread指令派送、thread搜尋,不過現行針對這些新增功能,僅支援於TNS/X系統。

下列將針對此次新增功能說明彙整如下:
  • thread thread-id:切換目前所在thread位置。如下列範例:
    (xInspect 0,766):thread 2
    [Switching to thread 2 (process 766)]
    #0 0xfffffffff12957fd in GTHREAD_START_ ()
    註:切換到thread 2作為當前所在thread位置。


  • info threads:查看process所建立的所有thread。如下列範例:
    (xInspect 0,766):info thread
    Id Target Id Frame
    * 1 process 766 thread 1 main (argc=1, argv=0x8001000)
    at /home/nsadi/./rs_server.c:14
    2 process 766 thread 2 0xfffffffff12957fd in GTHREAD_START_ ()
    3 process 766 thread 3 0xfffffffff12957fd in GTHREAD_START_ ()
    註:Id為thread library所指派的thread TID。
    Target Id為process ID加上thread TID。
    Frame對應當下所在function及所在source位置。


  • thread apply:針對指定的thread或是所有thread執行特定指令。如下列範例:
    (xInspect 0,766):thread apply all bt

    Thread 3 (process 766):
    #0 0xfffffffff12957fd in GTHREAD_START_ ()

    Thread 2 (process 766):
    #0 0xfffffffff12957fd in GTHREAD_START_ ()

    Thread 1 (process 766):
    #0 main (argc=1, argv=0x8001000) at /home/nsadi/./rs_server.c:14
    #1 0x70000ba0 in _MAIN () at \BLPROD.$RTAL.T8432ACK.CMAIN64C:52

    註:針對每個thread發送backtrace指令。


  • thread name:針對目前所在thread作命名。主要將於info thread中顯示作區隔查看,如下列範例:
    (xInspect 0,1177):thread name test
    (xInspect 0,1177):info thread
    Id Target Id Frame
    * 1 process 1177 thread 1 "test" main (argc=1, argv=0x8001000)
    at /home/nsadi/./rs_server.c:14
    2 process 1177 thread 2 0xfffffffff12957fd in GTHREAD_START_ ()
    3 process 1177 thread 3 0xfffffffff12957fd in GTHREAD_START_ ()


  • thread find:搜尋滿足條件的thread。主要依照thread ID或是name作搜尋,列出滿足的thread資訊,如下列範例:
    (xInspect 0,1177):thread find test
    Thread 1 has name 'test'
    (xInspect 0,1177):thread find 1177
    Thread 1 has target id 'process 1177 thread 1'
    Thread 2 has target id 'process 1177 thread 2'
    Thread 3 has target id 'process 1177 thread 3'


  • 針對thread指定breakpoint功能。藉由thread指令切換不同thread,針對各thread底下設定breakpoint位置;如下列範例:
    (xInspect 0,1177):thread 1
    [Switching to thread 1 (process 1177)]
    (xInspect 0,1177):l
    9
    10 char *client_message ;
    11 char *msg_ptr ;
    12
    13
    *14 int snd_recv_buffer_size = DEFAULT_SEND_RECV_SIZE ;
    15 uint16_t port_number = PORT_NUMBER ;
    16
    17
    18 while ((c = getopt (argc, argv, "a:b:p:h")) != -1) {
    19 switch (c) {
    20 case 'b':
    21 snd_recv_buffer_size = atoi(optarg) ;
    22 if ((snd_recv_buffer_size < DEFAULT_MSG_SIZE) &&
    (snd_recv_buffer_size > MAX_MESSAGE_SIZE)) {
    23 printf("rs_server: send/recv sockopt size not within legal bounds %d..%d \n",
    24 (int)DEFAULT_MSG_SIZE,(int)MAX_MESSAGE_SIZE) ;
    25 exit (-1) ;
    26 }
    27
    28 break ;
    (xInspect 0,1177):b 21
    Breakpoint 2 at 0x70000df0: file /home/nsadi/./rs_server.c, line 21.
    (xInspect 0,1177):info break
    Num Type Disp Enb Glb Address What
    2 breakpoint keep y n 0x0000000070000df0 in main
    at /home/nsadi/./rs_server.c:
    21

支援版本資訊

TNS/X Native Inspect(T0903L02^AAI),適用於L15.02.00~L20.05.00的RVU版本,此版本於2019年9月推出。為現行最新版本。

結論

隨著近期NonStop於OSS陸續支援新增功能,因此用戶藉由OSS環境開發所需應用系統的機會亦隨之增加,因此以thread方式進行應用程式的開發機率亦提升不少,藉由此次native inspect推出的新增功能,對於程式開發階段乃至於後續維護的除錯工作,提供更為便利的操作。藉由thread切換控制,更便於程式除錯時,取得較佳的主控權與設定。

參考資料

1.Interactive upgrade guide 2 866489-001
2.Native Inspect Manual P20528-001

 

回上一頁