- 論壇徽章:
- 0
|
1. 主要是父子進(jìn)程的調(diào)試問題,出現(xiàn)一個很奇怪的現(xiàn)象。在子進(jìn)程中設(shè)置斷點(diǎn),會將子進(jìn)程的弄
成defunction(僵死)的進(jìn)程。然而如果在父進(jìn)程的部分設(shè)置斷點(diǎn),就不會出現(xiàn)子進(jìn)程僵死的問題。
好像是子進(jìn)程一掛就掛死了。
int main(void)
{
pid_t pid;
/* fork the child process */
pid = fork();
if (pid < (pid_t)0)
{
printf("fork failed . \n");
exit(1);
}
if (pid == (pid_t)0)
/* 子進(jìn)程 */
{
(斷點(diǎn)在這) printf("process child before sleep. \n");
sleep(3000);
}
else {
printf("process parent before sleep. \n");
sleep(300);
}
在父進(jìn)程中設(shè)置斷點(diǎn),父子進(jìn)程都沒有問題。
int main(void)
{
pid_t pid;
/* fork the child process */
pid = fork();
if (pid < (pid_t)0)
{
printf("fork failed . \n");
exit(1);
}
if (pid == (pid_t)0)
/* 子進(jìn)程 */
{
printf("process child before sleep. \n");
sleep(3000);
}
else {
(斷點(diǎn)在這) printf("process parent before sleep. \n");
sleep(300);
}
這是不是意味著用GDB調(diào)試父子進(jìn)程,只能是在父子進(jìn)程都運(yùn)行ok的情況下,分別將gdb attach到進(jìn)程上。
但是如果只想起一個gdb, 或者是子進(jìn)程成功運(yùn)行起來,但是馬上出錯,根本來不及attach,這種方法就
有問題了。不知道是不是gdb調(diào)試這種多進(jìn)程的缺陷? 好像在網(wǎng)上看到過。
測試用的環(huán)境是這樣的:
SunOS 5.7 Generic_106541-23 sun4u sparc SUNW,Ultra-4
2. 父進(jìn)程被掛起,子進(jìn)程是不是也被掛起來了? 至少從gdb的結(jié)果來看,不是的。 |
|