今日、Eclipse を使用しているときに、説明できないことに遭遇しました。
基本的に、終了直前に stdout に書き込む関数をデバッグしようとすると、Eclipse は関数から戻らず、そこでデバッグを停止します。(関数は、最後に stdout に書き込む限り、他のことを行うことができます。)
予期しない動作を引き起こすプログラムは、たとえば次のようになります。
#include <stdio.h>
void testfunc(void)
{
puts("I hate you ");
}
int main(void)
{
testfunc();
printf("so, so much.");
return 3;
}
この場合、スタック トレースにいくつかの奇妙なメモリ位置も示されます。
printf も同じ動作を引き起こします。これは、関数をステップ オーバーしたときではなく、トレースしたときにのみ発生することに言及することは注目に値します。これは、私が示したコードからではない問題を指しているように見えます。
関数を次のように変更します。
void testfunc(void)
{
int a;
a=3;
puts("I hate you ");
}
プロセスに送信された SIGSEGV シグナルを取得します。
void testfunc(void)
{
int a;
puts("I hate you ");
a=3;
}
問題なく動作します。
私が言ったように、関数をステップオーバーするか、プログラムを実行するだけ (デバッグではない) は問題なく動作し、gcc を使用して手動でコンパイルし、端末でプログラムを実行する場合も同様です。
Fedora 19 を実行しており、Eclipse はバージョン: 4.3.1、ビルド ID: 5fc19 です。
何か案は?