2

Cでプログラムを書き込もうとしています(Linux64ビットとGCC4.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

この問題の解決にご協力ください。

4

1 に答える 1

3

-g を指定してコードをコンパイルし、-O [コンパイラ フラグ] を削除してみてください。コンパイラ (gcc) を最適化すると、命令の順序が変更されて速度が向上します。再コンパイル後、アタッチ デバッガーを再度実行します。

于 2012-10-26T14:15:52.683 に答える