我正在尝试用C语言编写一个程序(在Linux 64位和GCC 4.1.2中)。

int program_instances(char *cmdname)
{
   char buf[32], *ret;
   char cmdbuf[512];
   FILE *cmdpipe;

   sprintf(cmdbuf, "/bin/ps -eo comm | /bin/grep -c '%s'",
      cmdname);
   cmdpipe = popen(cmdbuf, "r");

   if (!cmdpipe)
   {
      return -1;
   }

   memset(buf, 0, sizeof(buf));
   ret = fgets(buf, sizeof(buf), cmdpipe);
   pclose(cmdpipe);

   if (!ret)
   {
      return -1;
   }

   int nr = atoi(buf);
   return nr;
}

尝试通过gdb调试问题,但在该行之后
sprintf(cmdbuf, "/bin/ps -eo comm | /bin/grep -c '%'",cmdname);

程序没有越过上面的线,抛出了下面的线。

执行新程序:/bin/bash
重新设置断点1时出错:没有加载符号表。使用"file"命令。
[新流程2437]
执行新程序:/bin/ps

请帮助我们解决此问题。

最佳答案

尝试使用-g编译代码,然后删除-O [compiler flag]。优化编译器(gcc)时,更改指令顺序以提高速度。重新编译后,再次附加调试器。

关于c++ - C程序终止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13088405/

10-14 14:19