0

C ++プログラムがハングし、デバッガーに接続してこのスタックトレースを見つけましたが、フレームゼロが完了していません。ここでうまくいかなかった可能性のある問題は何ですか?収集できる情報がもっとあれば、デバッガーにはまだあります。他のスレッドもあります。

#0  0xffffe410 in __kernel_vsyscall ()
#1  0x0083929b in write () from /lib/libc.so.6
#2  0x007d9cd4 in _IO_new_file_write () from /lib/libc.so.6
#3  0x007d9995 in new_do_write () from /lib/libc.so.6
#4  0x007d9c7f in _IO_new_do_write () from /lib/libc.so.6
#5  0x007da56e in _IO_new_file_overflow () from /lib/libc.so.6
#6  0x007d9b6c in _IO_new_file_xsputn () from /lib/libc.so.6
#7  0x007d012f in fwrite () from /lib/libc.so.6
#8  0x009a96f6 in ?? () from /usr/lib/libstdc++.so.6
#9  0x009ac66b in std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) () from /usr/lib/libstdc++.so.6
#10 0x0822aa2c in printErrorMsg (format=0x848675f "#%2i %s: %s(...) %s [%p]\n") at myAssert.cpp:66

フレーム10のソースコードは次のとおりです。

void
printErrorMsg(const char *format, ...)
{
  va_list ap;
  const int size = 4096;
  char buffer[size];

  va_start(ap, format);

  vsnprintf(buffer, size, format, ap);

  va_end(ap);

  std::clog << buffer;
  std::cout << buffer; // Code is hung here in frame 10.
}

コードはスタックトレースを出力しようとしています。

4

1 に答える 1

1

問題は、親がsshを介して呼び出され、それを開始したssh接続が終了した場合、fork()された子プロセスに有効なcoutがないことであるように見えます。

解決策は、召喚プロセスが終了した後、coutの使用を停止することです。fork()された子プロセスによって設定されたログファイルに送られるため、clogは正常に機能します。

于 2012-05-03T14:54:30.183 に答える