我们正在处理客户端/服务器应用程序。我正在研究各种日志。由于某些管理上的决定,我们最近迁移到了netbeans IDE。
我是Asp.net的开发人员,最近转到了底层编程。我只了解C的基础知识(课程级programmig),所以花了两天的时间来理解C的派生概念。
现在,我正在调试以下由高级开发人员(当然她不在城市)编写的代码:
int UpdateLogsDuringExecution(char *Input)
{
pid_t pid;
int status;
pid = fork();
if (pid == 0)
{
//write data to file
return 1; //on successful execution & 0 otherwise.
}
else
{
do
{
waitpid(pid, &status, WUNTRACED); //after this statement debugger does not hit any break points
} while (!WIFEXITED(status) && !WIFSIGNALED(status));
}
kill(0, SIGTERM); //if I change WUNTRACED to any other flag (for testing/understanding), debugger gives error something like Forward and Continue, Pause and Continue etc.
return 1;
}
int main()
{
setuid(0);
int stat = 1;
while (stat)
{
char *userInput = TakeUserInput();
stat = UpdateLogsDuringExecution(userInput);
if(!stat)
break;
stat= checkAndExecFlag();
.
.
.
.
//do more work
}
return 1;
}
请注意,此代码可以正常工作,但我想调试该代码以了解业务逻辑
请帮助我了解此行为。我认为可能是 waitpid 引起的,如果 WUNTRACED 更改为任何其他标志,则 kill 会导致调试器无法再击中任何断点
欢迎提出所有建议。
谢谢。
修改
程序中的所有函数都只有完全相同的结构
if(pid==0) //differs