C++ アプリケーションの実行中に非常にイライラする問題が発生しました。Windows XP の Interix サブシステムで pgcpp コンパイラを使用しています。私の問題は基本的にここで説明されています:
ヘッダー ファイルにクラス定義があります。このヘッダー ファイルは、1 つのソース ファイルに含まれています。このクラスには 2 つのコンストラクターがあり、基本的にロガーの実装に使用されます。最初のコンストラクターは引数として ostream *out を取り、2 番目のオーバーロードされたコンストラクターはファイル名とデフォルトのブール値 false を取ります。この 2 番目のコンストラクターの目的は、渡すファイル名のストリームを取得し、メッセージのログ記録を開始することです。コンストラクタ内のコードは次のとおりです。
MessageLogger::MessageLogger(std::ostream *out): p_out (out), p_ofstream (0)
{
if (p_out)
{
(*p_out) << "Started logging messages" << endl;
}
}
MessageLogger::MessageLogger (char const *filename, bool append_to_file) : p_out (0), p_ofstream (0)
{
if (append_to_file)
{
p_ofstream = new std::ofstream (filename, ios::app);
}
else
{
p_ofstream = new std::ofstream (filename);
}
p_out = p_ofstream;
if (p_out)
{
(*p_out) << "Started logging messages" << endl;
}
}
p_out と p_ofstream の宣言は次のとおりです。
std::ostream *p_out;
std::ofstream *p_ofstream;
unsigned int p_indent_level;
上記の 3 つはすべてプライベート メンバーです。MessageLogger クラスのインスタンス化は次のように行われます。
MessageLogger logger ("filename");
append_to_file のデフォルト値は false であることに注意してください。PGDBG
挙動不審でもあります。p_ofstream = new std::ofstream (filename);
コントロールが にあり、ランダムな場所にステップインしてアプリケーションがクラッシュしたときに、不可解にステップインでき ます。
また、PGDBG で混合コードまたは逆アセンブリ コードのいずれかを表示しようとすると、デバッガーがクラッシュして次のメッセージが表示されます。
jpgdbg parse: Newline must follow cmd in 'eleq "0" struct MessageLogger *Mes
sageLogger::MessageLogger(struct basic_ostream *out); (TranslatorGeneric.cpp
)
'
jpgdbg jpgdbgFileSelector processMsg: Warning unexpected msg token 5
jpgdbg parse: Newline must follow cmd in 'eleq "1" struct MessageLogger *Mes
sageLogger::MessageLogger(char *filename, unsigned char append_to_file); (Tr
anslatorGeneric.cpp)
'
jpgdbg jpgdbgFileSelector processMsg: Warning unexpected msg token 5
上記とまったく同じことを行ったサンプル プログラムでこれを再現することはできませんが、すべて正常に動作します。誰かが何が起こっているのか、これに修正があるかどうかを説明できますか?
ありがとう、アディティア。