前回まででスレッド対応は完了のはずだったのだけど,ちょっとバグがあったので 修正.
前回のソースコードで info threads を2回実行すると,以下のようになる.
(gdb) info threads 7 Thread 135026528 ( Name: httpd, State: SLP, Priority: 09) 0x0805eeb7 in kill () 6 Thread 135025760 ( Name: telnetd, State: SLP, Priority: 08) 0x0805eeb7 in kill () 5 Thread 135024992 ( Name: clock, State: SLP, Priority: 07) 0x0805eeb7 in kill () 4 Thread 135024224 ( Name: idle, State: RUN, Priority: 1f) 0x0806095b in select () 3 Thread 135023456 ( Name: outlog, State: SLP, Priority: 03) 0x0805eeb7 in kill () 2 Thread 135021920 ( Name: extintr, State: SLP, Priority: 01) 0x0805eeb7 in kill () * 1 Thread 135022688 ( Name: stubd, State: RUN, Priority: 02) breakpoint () at i386-stub.c:1187 (gdb) info threads 8 Thread -1 ( Name: stubd, State: RUN, Priority: 02) breakpoint () at i386-stub.c:1187 7 Thread 135026528 ( Name: httpd, State: SLP, Priority: 09) 0x0805eeb7 in kill () 6 Thread 135025760 ( Name: telnetd, State: SLP, Priority: 08) 0x0805eeb7 in kill () 5 Thread 135024992 ( Name: clock, State: SLP, Priority: 07) 0x0805eeb7 in kill () 4 Thread 135024224 ( Name: idle, State: RUN, Priority: 1f) 0x0806095b in select () 3 Thread 135023456 ( Name: outlog, State: SLP, Priority: 03) 0x0805eeb7 in kill () 2 Thread 135021920 ( Name: extintr, State: SLP, Priority: 01) 0x0805eeb7 in kill () * 1 Thread 135022688 ( Name: stubd, State: RUN, Priority: 02) breakpoint () at i386-stub.c:1187 (gdb)2回目の info threads で,スレッド番号8としてなんかスレッドIDが-1の stubd というのが出てしまっている.stubd はスレッド番号1ですでに出ているので, これは明らかにおかしい.
このときの通信内容は以下.
($T054:58f60e08;5:58f60e08;8:65af0408;thread:080c4860;#7d)[+] [$M8048088,1:55#c2](+)($OK#9a)[+] [$T080c4860#21](+)($OK#9a)[+] [$qfThreadInfo#bb](+)($#00)[+] [$qL1200000000000000000#50](+)($qM010000000000000000000000000080c4560#99)[+] [$qL02000000000080c4560#99](+)($qM01000000000080c456000000000080c4860#e6)[+] [$qL02000000000080c4860#9c](+)($qM01000000000080c486000000000080c4b60#13)[+] [$qL02000000000080c4b60#c6](+)($qM01000000000080c4b6000000000080c4e60#40)[+] [$qL02000000000080c4e60#c9](+)($qM01000000000080c4e6000000000080c5160#10)[+] [$qL02000000000080c5160#96](+)($qM01000000000080c516000000000080c5460#e0)[+] [$qL02000000000080c5460#99](+)($qM01000000000080c546000000000080c5760#e6)[+] [$qL02000000000080c5760#9c](+)($qM01100000000080c5760#9d)[+] [$qThreadExtraInfo,80c5760#22](+)($#00)[+] [$qP0000001f00000000080c5760#c5](+)($QP0000001f00000000080c5760000000011000000000080c5760000000020110000000403SLP0000000805httpd000000100209#1b)[+] [$Hg80c5760#4c](+)($OK#9a)[+] [$g#67](+)($0000000000000000ea04000060570c08fcc5110818c61108ecc7110800000000b7ee050802020000330000003b0000003b0000003b0000003b0000001b000000#1b)[+] [$qP0000001f00000000080c5460#c2](+)($QP0000001f00000000080c5460000000011000000000080c5460000000020110000000403SLP0000000807telnetd000000100208#e2)[+] [$Hg80c5460#49](+)($OK#9a)[+] [$g#67](+)($0000000000000000ea04000060540c08fc35110818361108ec37110800000000b7ee050802020000330000003b0000003b0000003b0000003b0000001b000000#88)[+] [$qP0000001f00000000080c5160#bf](+)($QP0000001f00000000080c5160000000011000000000080c5160000000020110000000403SLP0000000805clock000000100207#f5)[+] [$Hg80c5160#46](+)($OK#9a)[+] [$g#67](+)($0000000098b00d08ea04000060510c083ca7100858a71008eca7100800000000b7ee050806020000330000003b0000003b0000003b0000003b0000001b000000#63)[+] [$qP0000001f00000000080c4e60#f2](+)($QP0000001f00000000080c4e60000000011000000000080c4e60000000020110000000403RUN0000000804idle00000010021f#22)[+] [$Hg80c4e60#79](+)($OK#9a)[+] [$g#67](+)($0400000004000000ffffffff604e0c088c171008b8171008ec171008000000005b09060813020000330000003b0000003b0000003b0000003b0000001b000000#a3)[+] [$qP0000001f00000000080c4b60#ef](+)($QP0000001f00000000080c4b60000000011000000000080c4b60000000020110000000403SLP0000000806outlog000000100203#e0)[+] [$Hg80c4b60#76](+)($OK#9a)[+] [$g#67](+)($0000000060800f08ea040000604b0c083c870f0858870f08ec870f0800000000b7ee050806020000330000003b0000003b0000003b0000003b0000001b000000#84)[+] [$qP0000001f00000000080c4560#c2](+)($QP0000001f00000000080c4560000000011000000000080c4560000000020110000000403SLP0000000807extintr000000100201#f9)[+] [$Hg80c4560#49](+)($OK#9a)[+] [$g#67](+)($0000000006000000ea04000060450c086c660e0888660e08ec670e0800000000b7ee050806020000330000003b0000003b0000003b0000003b0000001b000000#0c)[+] [$qP0000001f00000000080c4860#c5](+)($QP0000001f00000000080c4860000000011000000000080c4860000000020110000000403RUN0000000805stubd000000100202#18)[+] [$Hg80c4860#4c](+)($OK#9a)[+] [$g#67](+)($00880d0800000000ea04000060480c0858f60e0858f60e08ecf70e080000000065af040802020000330000003b0000003b0000003b0000003b0000001b000000#80)[+] [$T080c5760#21](+)($OK#9a)[+] [$T080c5460#1e](+)($OK#9a)[+] [$T080c5160#1b](+)($OK#9a)[+] [$T080c4e60#4e](+)($OK#9a)[+] [$T080c4b60#4b](+)($OK#9a)[+] [$T080c4560#1e](+)($OK#9a)[+] [$T080c4860#21](+)($OK#9a)[+] [$qL120f0000000080c5760#d3](+)($qM011f0000000080c5760#d3)[+] [$qP0000001f00000000ffffffff#28](+)($QP0000001f00000000ffffffff000000011000000000080c4860000000020110000000403RUN0000000805stubd000000100202#7b)[+] [$Hg-1#0d](+)($OK#9a)[+] [$g#67](+)($00880d0800000000ea04000060480c0858f60e0858f60e08ecf70e080000000065af040802020000330000003b0000003b0000003b0000003b0000001b000000#80)[+] [$qP0000001f00000000080c5760#c5](+)($QP0000001f00000000080c5760000000011000000000080c5760000000020110000000403SLP0000000805httpd000000100209#1b)[+] [$Hg80c5760#4c](+)($OK#9a)[+] [$g#67](+)($0000000000000000ea04000060570c08fcc5110818c61108ecc7110800000000b7ee050802020000330000003b0000003b0000003b0000003b0000001b000000#1b)[+] [$qP0000001f00000000080c5460#c2](+)($QP0000001f00000000080c5460000000011000000000080c5460000000020110000000403SLP0000000807telnetd000000100208#e2)[+] [$Hg80c5460#49](+)($OK#9a)[+] [$g#67](+)($0000000000000000ea04000060540c08fc35110818361108ec37110800000000b7ee050802020000330000003b0000003b0000003b0000003b0000001b000000#88)[+] [$qP0000001f00000000080c5160#bf](+)($QP0000001f00000000080c5160000000011000000000080c5160000000020110000000403SLP0000000805clock000000100207#f5)[+] [$Hg80c5160#46](+)($OK#9a)[+] [$g#67](+)($0000000098b00d08ea04000060510c083ca7100858a71008eca7100800000000b7ee050806020000330000003b0000003b0000003b0000003b0000001b000000#63)[+] [$qP0000001f00000000080c4e60#f2](+)($QP0000001f00000000080c4e60000000011000000000080c4e60000000020110000000403RUN0000000804idle00000010021f#22)[+] [$Hg80c4e60#79](+)($OK#9a)[+] [$g#67](+)($0400000004000000ffffffff604e0c088c171008b8171008ec171008000000005b09060813020000330000003b0000003b0000003b0000003b0000001b000000#a3)[+] [$qP0000001f00000000080c4b60#ef](+)($QP0000001f00000000080c4b60000000011000000000080c4b60000000020110000000403SLP0000000806outlog000000100203#e0)[+] [$Hg80c4b60#76](+)($OK#9a)[+] [$g#67](+)($0000000060800f08ea040000604b0c083c870f0858870f08ec870f0800000000b7ee050806020000330000003b0000003b0000003b0000003b0000001b000000#84)[+] [$qP0000001f00000000080c4560#c2](+)($QP0000001f00000000080c4560000000011000000000080c4560000000020110000000403SLP0000000807extintr000000100201#f9)[+] [$Hg80c4560#49](+)($OK#9a)[+] [$g#67](+)($0000000006000000ea04000060450c086c660e0888660e08ec670e0800000000b7ee050806020000330000003b0000003b0000003b0000003b0000001b000000#0c)[+] [$qP0000001f00000000080c4860#c5](+)($QP0000001f00000000080c4860000000011000000000080c4860000000020110000000403RUN0000000805stubd000000100202#18)[+] [$Hg80c4860#4c](+)($OK#9a)[+] [$g#67](+)($00880d0800000000ea04000060480c0858f60e0858f60e08ecf70e080000000065af040802020000330000003b0000003b0000003b0000003b0000001b000000#80)[+] (この状態で停止)通信内容をよく見ると,
[$qP0000001f00000000ffffffff#28](+)($QP0000001f00000000ffffffff000000011000000000080c4860000000020110000000403RUN0000000805stubd000000100202#7b)[+] [$Hg-1#0d](+)($OK#9a)[+]という通信が行われていて,スレッドIDが-1でqPコマンドが発行されているんだな. で,その直後にやはりスレッドIDが-1でHgコマンドが発行されている.
Interface誌の今月号(2007/12)を見ると,HgコマンドがスレッドIDを-1で発行する 際には,どうもすべてのスレッドに対して処理を行う,という意味になるらしい. あと remote.c の内部では,Hgコマンドは set_thread() によって発行されるの だけど,
set_thread (-1, 0);のようにして,スレッドIDを-1として発行している部分がある. まあ上の場合は第2引数がゼロなので,HgではなくHcコマンドが発行されるのだが, スレッドIDが-1というのはやはり特別な意味を持っているらしく, このへんがあやしい.
...とおもっていろいろ調べたり,スレッドIDが-1の場合のqPコマンドやHgコマンドの 動作をいろいろ変えたりして試してみたのだけど,おかしいまま.うーんへんだ.
どうもqPがスレッドIDを-1で発行されること自体,おかしな気がする. それでもってそれがまた成功してしまっているので, その後に Hg も -1 で発行されてしまっているのではなかろうか?
で,スレッド関連の通信内容をもう一度チェック. とくに,多少複雑なプロトコルになっているqLコマンドとかをよく見直す. そしたら以下のあやしい部分を発見.
[$qL1200000000000000000#50](+)($qM010000000000000000000000000080c4560#99)[+] [$qL02000000000080c4560#99](+)($qM01000000000080c456000000000080c4860#e6)[+] [$qL02000000000080c4860#9c](+)($qM01000000000080c486000000000080c4b60#13)[+] [$qL02000000000080c4b60#c6](+)($qM01000000000080c4b6000000000080c4e60#40)[+] [$qL02000000000080c4e60#c9](+)($qM01000000000080c4e6000000000080c5160#10)[+] [$qL02000000000080c5160#96](+)($qM01000000000080c516000000000080c5460#e0)[+] [$qL02000000000080c5460#99](+)($qM01000000000080c546000000000080c5760#e6)[+] [$qL02000000000080c5760#9c](+)($qM01100000000080c5760#9d)[+]最後のqLに対するqMの応答は,もうそれ以上スレッドが無いため, スレッドIDが空となって返っている.しかし応答では qM011... となっており, doneフラグは立っているのだが,スレッド数が1のままなんだな. i386-stub.c のqLコマンド応答部分を見てみると
case 'q': switch (*ptr++) { case 'L': { int startflag, doneflag, countmax, count = 1, i; ... ptr = remcomOutBuffer; *ptr++ = 'q'; *ptr++ = 'M'; *ptr++ = hexchars[count >> 4]; *ptr++ = hexchars[count & 0xf]; *ptr++ = doneflag ? '1' : '0';となっており,スレッド数である count が無条件で1になっている.これはまずい.
ということは,qPがスレッドIDを0xffffffff(つまり,-1)で発行されることと, HgがスレッドIDを-1で発行されることの対処を前回入れているが, 実は上記 count がおかしいためにへんなスレッドIDのスレッドが登録されてしまって いるのがそもそもの原因なのではなかろうか? count に対する修正を入れれば, このへんの対処は不要なのではなかろうか.
で,修正したのがこんな感じ.
(2009/04/10 ライセンスに関する文書として,KL-01とLICENSEを追加. 詳しくは第43回を参照)
前回からの差分については diff.txt 参照.
では修正内容について説明しよう.まずqLコマンドの応答部分.
diff -ruN kozos22/i386-stub.c kozos23/i386-stub.c --- kozos22/i386-stub.c Sat Nov 24 14:39:50 2007 +++ kozos23/i386-stub.c Sat Nov 24 17:45:25 2007 @@ -986,7 +986,7 @@ { case 'L': { - int startflag, doneflag, countmax, count = 1, i; + int startflag, doneflag, countmax, count, i; unsigned int threadid[2]; kz_thread *thp; @@ -1008,6 +1008,9 @@ } } + count = 1; + if (doneflag) count = 0; + ptr = remcomOutBuffer; *ptr++ = 'q'; *ptr++ = 'M';スレッド数を,最後のスレッドの場合はゼロにするように修正してある.
さらに,qPコマンドの応答部分.
@@ -1048,16 +1051,8 @@ mode = hexToIntN(&ptr, 4); threadid[0] = hexToIntN(&ptr, 4); threadid[1] = hexToIntN(&ptr, 4); - if (threadid[1] == 0xffffffff) - { - /* - * 何を返すべきかちょっと不明なので,とりあえず - * カレントスレッドを返す. - */ - thp = gen_thread; /* current を返すべきか? 不明... */ - } else { - thp = (kz_thread *)threadid[1]; - } + + thp = (kz_thread *)threadid[1]; ptr = remcomOutBuffer; *ptr++ = 'Q';たぶん今回のqLコマンドのバグ修正により,スレッドIDが0xffffffffでqPが 発行されるようなことは無くなると思うので,その場合の対処を削除. まあこんなへんな処理,残しといてもしょうがないしね.
次に,Hgコマンドの応答部分の修正.
@@ -1125,8 +1120,11 @@ if (hexToInt(&ptr, &val)) { if (rev) val = -val; + if (val == -1) + { + break; + } stub_restore_regs(gen_thread); - if (val == -1) val = (int)current; gen_thread = (kz_thread *)val; stub_store_regs(gen_thread); strcpy (remcomOutBuffer, "OK");今回の修正で,スレッドIDが-1でHgが発行されることは無くなると思われるのだが, 上のほうで書いたように,Interface誌によれば, スレッドIDが-1でHgコマンドが発行された場合はすべてのスレッドを指す(?) らしい(?)ので,まあ未対応として「$#00」を返すようにする. まあたぶん不要だとは思うのだけど,いちおう入れておく.
では動作させてみよう.いつもどおり実行形式を起動して gdb で接続, continue,Ctrl-C でブレークし,info threads を繰り返し実行する.
(gdb) info threads 7 Thread 135026496 ( Name: httpd, State: SLP, Priority: 09) 0x0805eeab in sigprocmask () 6 Thread 135025728 ( Name: telnetd, State: SLP, Priority: 08) 0x0805eeab in sigprocmask () 5 Thread 135024960 ( Name: clock, State: SLP, Priority: 07) 0x0805eeab in sigprocmask () 4 Thread 135024192 ( Name: idle, State: RUN, Priority: 1f) 0x0806094f in tcflow () 3 Thread 135023424 ( Name: outlog, State: SLP, Priority: 03) 0x0805eeab in sigprocmask () 2 Thread 135021888 ( Name: extintr, State: SLP, Priority: 01) 0x0805eeab in sigprocmask () * 1 Thread 135022656 ( Name: stubd, State: RUN, Priority: 02) 0x0804af59 in breakpoint () at i386-stub.c:1184 (gdb) info threads 7 Thread 135026496 ( Name: httpd, State: SLP, Priority: 09) 0x0805eeab in sigprocmask () 6 Thread 135025728 ( Name: telnetd, State: SLP, Priority: 08) 0x0805eeab in sigprocmask () 5 Thread 135024960 ( Name: clock, State: SLP, Priority: 07) 0x0805eeab in sigprocmask () 4 Thread 135024192 ( Name: idle, State: RUN, Priority: 1f) 0x0806094f in tcflow () 3 Thread 135023424 ( Name: outlog, State: SLP, Priority: 03) 0x0805eeab in sigprocmask () 2 Thread 135021888 ( Name: extintr, State: SLP, Priority: 01) 0x0805eeab in sigprocmask () * 1 Thread 135022656 ( Name: stubd, State: RUN, Priority: 02) 0x0804af59 in breakpoint () at i386-stub.c:1184 (gdb)おー,スレッドIDが-1のへんなスレッドが無くなっている.問題なさそうだ.
この場合の通信内容は以下.
($T054:58f60e08;5:58f60e08;8:59af0408;thread:080c4840;#7e)[+] [$M8048088,1:55#c2](+)($OK#9a)[+] [$T080c4840#1f](+)($OK#9a)[+] [$qfThreadInfo#bb](+)($#00)[+] [$qL1200000000000000000#50](+)($qM010000000000000000000000000080c4540#97)[+] [$qL02000000000080c4540#97](+)($qM01000000000080c454000000000080c4840#e2)[+] [$qL02000000000080c4840#9a](+)($qM01000000000080c484000000000080c4b40#0f)[+] [$qL02000000000080c4b40#c4](+)($qM01000000000080c4b4000000000080c4e40#3c)[+] [$qL02000000000080c4e40#c7](+)($qM01000000000080c4e4000000000080c5140#0c)[+] [$qL02000000000080c5140#94](+)($qM01000000000080c514000000000080c5440#dc)[+] [$qL02000000000080c5440#97](+)($qM01000000000080c544000000000080c5740#e2)[+] [$qL02000000000080c5740#9a](+)($qM00100000000080c5740#9a)[+] [$qThreadExtraInfo,80c5740#20](+)($#00)[+] [$qP0000001f00000000080c5740#c3](+)($QP0000001f00000000080c5740000000011000000000080c5740000000020110000000403SLP0000000805httpd000000100209#17)[+] [$Hg80c5740#4a](+)($OK#9a)[+] [$g#67](+)($0000000000000000ea04000040570c08fcc5110818c61108ecc7110800000000abee050802020000330000003b0000003b0000003b0000003b0000001b000000#43)[+] [$qP0000001f00000000080c5440#c0](+)($QP0000001f00000000080c5440000000011000000000080c5440000000020110000000403SLP0000000807telnetd000000100208#de)[+] [$Hg80c5440#47](+)($OK#9a)[+] [$g#67](+)($0000000000000000ea04000040540c08fc35110818361108ec37110800000000abee050802020000330000003b0000003b0000003b0000003b0000001b000000#b0)[+] [$qP0000001f00000000080c5140#bd](+)($QP0000001f00000000080c5140000000011000000000080c5140000000020110000000403SLP0000000805clock000000100207#f1)[+] [$Hg80c5140#44](+)($OK#9a)[+] [$g#67](+)($0000000098b00d08ea04000040510c083ca7100858a71008eca7100800000000abee050806020000330000003b0000003b0000003b0000003b0000001b000000#8b)[+] [$qP0000001f00000000080c4e40#f0](+)($QP0000001f00000000080c4e40000000011000000000080c4e40000000020110000000403RUN0000000804idle00000010021f#1e)[+] [$Hg80c4e40#77](+)($OK#9a)[+] [$g#67](+)($0400000004000000ffffffff404e0c088c171008b8171008ec171008000000004f09060813020000330000003b0000003b0000003b0000003b0000001b000000#a4)[+] [$qP0000001f00000000080c4b40#ed](+)($QP0000001f00000000080c4b40000000011000000000080c4b40000000020110000000403SLP0000000806outlog000000100203#dc)[+] [$Hg80c4b40#74](+)($OK#9a)[+] [$g#67](+)($0000000060800f08ea040000404b0c083c870f0858870f08ec870f0800000000abee050806020000330000003b0000003b0000003b0000003b0000001b000000#ac)[+] [$qP0000001f00000000080c4540#c0](+)($QP0000001f00000000080c4540000000011000000000080c4540000000020110000000403SLP0000000807extintr000000100201#f5)[+] [$Hg80c4540#47](+)($OK#9a)[+] [$g#67](+)($0000000006000000ea04000040450c086c660e0888660e08ec670e0800000000abee050806020000330000003b0000003b0000003b0000003b0000001b000000#34)[+] [$qP0000001f00000000080c4840#c3](+)($QP0000001f00000000080c4840000000011000000000080c4840000000020110000000403RUN0000000805stubd000000100202#14)[+] [$Hg80c4840#4a](+)($OK#9a)[+] [$g#67](+)($00880d0800000000ea04000040480c0858f60e0858f60e08ecf70e080000000059af040802020000330000003b0000003b0000003b0000003b0000001b000000#81)[+] [$T080c5740#1f](+)($OK#9a)[+] [$T080c5440#1c](+)($OK#9a)[+] [$T080c5140#19](+)($OK#9a)[+] [$T080c4e40#4c](+)($OK#9a)[+] [$T080c4b40#49](+)($OK#9a)[+] [$T080c4540#1c](+)($OK#9a)[+] [$T080c4840#1f](+)($OK#9a)[+] [$qL12000000000080c5740#9b](+)($qM00100000000080c5740#9a)[+] [$qP0000001f00000000080c5740#c3](+)($QP0000001f00000000080c5740000000011000000000080c5740000000020110000000403SLP0000000805httpd000000100209#17)[+] [$Hg80c5740#4a](+)($OK#9a)[+] [$g#67](+)($0000000000000000ea04000040570c08fcc5110818c61108ecc7110800000000abee050802020000330000003b0000003b0000003b0000003b0000001b000000#43)[+] [$qP0000001f00000000080c5440#c0](+)($QP0000001f00000000080c5440000000011000000000080c5440000000020110000000403SLP0000000807telnetd000000100208#de)[+] [$Hg80c5440#47](+)($OK#9a)[+] [$g#67](+)($0000000000000000ea04000040540c08fc35110818361108ec37110800000000abee050802020000330000003b0000003b0000003b0000003b0000001b000000#b0)[+] [$qP0000001f00000000080c5140#bd](+)($QP0000001f00000000080c5140000000011000000000080c5140000000020110000000403SLP0000000805clock000000100207#f1)[+] [$Hg80c5140#44](+)($OK#9a)[+] [$g#67](+)($0000000098b00d08ea04000040510c083ca7100858a71008eca7100800000000abee050806020000330000003b0000003b0000003b0000003b0000001b000000#8b)[+] [$qP0000001f00000000080c4e40#f0](+)($QP0000001f00000000080c4e40000000011000000000080c4e40000000020110000000403RUN0000000804idle00000010021f#1e)[+] [$Hg80c4e40#77](+)($OK#9a)[+] [$g#67](+)($0400000004000000ffffffff404e0c088c171008b8171008ec171008000000004f09060813020000330000003b0000003b0000003b0000003b0000001b000000#a4)[+] [$qP0000001f00000000080c4b40#ed](+)($QP0000001f00000000080c4b40000000011000000000080c4b40000000020110000000403SLP0000000806outlog000000100203#dc)[+] [$Hg80c4b40#74](+)($OK#9a)[+] [$g#67](+)($0000000060800f08ea040000404b0c083c870f0858870f08ec870f0800000000abee050806020000330000003b0000003b0000003b0000003b0000001b000000#ac)[+] [$qP0000001f00000000080c4540#c0](+)($QP0000001f00000000080c4540000000011000000000080c4540000000020110000000403SLP0000000807extintr000000100201#f5)[+] [$Hg80c4540#47](+)($OK#9a)[+] [$g#67](+)($0000000006000000ea04000040450c086c660e0888660e08ec670e0800000000abee050806020000330000003b0000003b0000003b0000003b0000001b000000#34)[+] [$qP0000001f00000000080c4840#c3](+)($QP0000001f00000000080c4840000000011000000000080c4840000000020110000000403RUN0000000805stubd000000100202#14)[+] [$Hg80c4840#4a](+)($OK#9a)[+] [$g#67](+)($00880d0800000000ea04000040480c0858f60e0858f60e08ecf70e080000000059af040802020000330000003b0000003b0000003b0000003b0000001b000000#81)[+] (この状態で停止)qLコマンドの最後が
[$qL02000000000080c5740#9a](+)($qM00100000000080c5740#9a)[+]となっていて,スレッド数がゼロ,doneフラグが立ったものが返っている. あとよく見るとわかるのだけど,前回まではあった「Hg-1」が今度は無くなっている. またスレッドIDを0xffffffff で qP コマンドが発行されることも無くなっている. うん,問題無しだ.