BBS水木清华站∶精华区
发信人: bro (阿飞*桃谷小仙:PP), 信区: Unix
标 题: GDB (7) Part two
发信站: BBS 水木清华站 (Mon Oct 12 10:00:24 1998)
发信人: captain (万里长征第一步) on board 'unix'
标 题: GDB (7) Part Two(转寄)
发信站: 国家智能机中心曙光站 (Fri Aug 21 04:59:13 1998)
发信人: lhh@argo (倚天), 信区: UNIX
标 题: GDB (7) Part Two(转寄)
发信站: Yat-sen Channel BBS (Thu Jul 30 14:43:28 1998)
转信站: argo
`thread THREADNO'
把线程号为THREADNO的线程设为当前线程。命令行参数THREADNO是gdb内定的
线程号。你可以用'info threads'命令来查看gdb内设置的线程号。gdb显示该线程
的系统定义的标识号和线程对应的堆栈。比如:
(gdb) thread 2
[Switching to process 35 thread 23]
0x34e5 in sigpause ()
"Switching后的内容取决于你的操作系统对线程标识的定义。
`thread apply [THREADNO] [ALL] ARGS'
此命令让你对一个以上的线程发出相同的命令"ARGS",[THREADNO]的含义同上。
如果你要向你进程中的所有的线程发出命令使用[ALL]选项。
无论gdb何时中断了你的程序(因为一个断点或是一个信号),它自动选择信号或
断点发生的线程为当前线程。gdb将用一个格式为'[Switching to SYSTAG]'的消息
来向你报告。
*参见:运行和停止多线程程序。
*参见:设置观察点
调试多进程的程序
==========================================
gdb对调试使用'fork'系统调用产生新进程的程序没有很多支持。当一个程序开始
一个新进程时,gdb将继续对父进程进行调试,子进程将不受影响的运行。如果你在子
进程可能会执行到的地方设了断点,那么子进程将收到'SIGTRAP'信号,如果子进程没
有对这个信号进行处理的话那么缺省的处理就是使子进程终止。
然而,如果你要一定要调试子进程的话,这儿有一个不是很麻烦的折衷的办法。在
子进程被运行起来的开头几句语句前加上一个'sleep'命令。这在调试过程中并不会引
起程序中很大的麻烦(不过你要自己注意例外的情况幺:-))。然后再使用'ps'命令列出
新开的子进程号,最后使用'attach'命令。这样就没有问题了。
关于这一段,本人觉得实际使用上并不全是这样。我在调试程中就试过,好象不一定
能起作用,要看gdb的版本和你所使用的操作系统了。
--
--
;36m※ 修改:.NewFile 于 Aug 21 13:00:12 修改本文.[FROM: 159.226.41.148]m
m;34m※ 来源:.Yat-sen Channel argo.zsu.edu.cn.[FROM: www.ee.zsu.edu.c]m
--
m;34m※ 转寄:.Yat-sen Channel argo.zsu.edu.cn.[FROM: 159.226.41.148]m
--
m※ 来源:.国家智能中心曙光站 bbs.ncic.ac.cn.[IP: 159.226.43.21] m
--
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.78.167]
BBS水木清华站∶精华区