1

今日、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 です。

何か案は?

4

0 に答える 0