2012-02-23 16 views
1

私は非常に奇妙な問題を抱えています。遠くから診断するのが難しいかもしれないことを理解しています。しかし、どんなヒントも役に立つでしょう。valgrindの実行中に例外がスローされますが、プログラムが直接呼び出されたときに例外がスローされない

はこのことを言って、ここに私の問題だ:

私は私のプログラムを実行するためにvalgrindのを実行すると、例外がスローされます。しかし、シェルから直接プログラムを呼び出すと、正常に動作します。

私はvalgrindのvgdbを使用して、この例外が発生する理由を調べようとしました。しかし、これは例外を発生させた後で変数を調べることができます。なぜなら、valgrindに(引き続き使用せずに)コードをステップ実行してgdbを起動する良い方法が見つからなかったからです。

私は既に例外がスローされたコードセグメントを再作成しようとしましたが、同じ変数コンテンツを使用して例外をトリガーしません。

私は、Ubuntu 11.10とgcc 4.6.1、valgrind 3.7.0、gdb 7.3のVMWare Workstation 8.0.1仮想マシンでこれを実行していると付け加えておきます。

ご協力いただきましてありがとうございます。

+1

私はこの動作の理由を見つけたと思います。 'vgdb'とシェルでは、最大の倍数の制限が異なっているようです。 'vgdb'の中で1.2E56^9を計算しようとした後、私は' nan'を受け取りますが、シェルから呼び出されたプログラムはうまくいっています(正しい結果が得られます)。 – Achim

答えて

0

ただ、いくつかのアイデア:

  1. あなたはvalgrindのを経由して、あなたのプログラムを呼び出す不足しているコマンドラインパラメータ - 多分あなたのプログラム

  2. 異なるランタイムに、このようなパラメータを渡すための特別な方法がありますプログラムがvalgrindで実行されたときの動作valgrindはデバッガのようなものなので、スレッドの順序が変わってしまい、コードの一部が遅く実行される可能性があります。競合状態のような不具合を引き起こすかもしれません。

ここでコードの一部を掲示することは可能ですか?特に例外が発生する場所の周りに投稿することは可能ですか?

+0

1)プログラムはコマンドラインパラメータを受け付けません。 2)基本的に、コードはまず関数評価を解析し、次に構築されたグラフ上で動作します。しかし、コードの実行は線形であり、valgrindはコードの実行順序を変更しないとします。 – Achim

+0

valgrindのデバッグに関して、ここにstackoverflowの別のスレッドがあります:http://stackoverflow.com/questions/ 4945586/how-to-make-valgrind-debugger-step-through-a-program – svenfx

+1

スレッドが表示されてからvgdbを試してみました。しかし、私が 'valgrind --vgdb = yes -vgdb-error = 0 main'を起動し、gdbの' target remote | vgdb'。それはそのスレッドに切り替わりますが、 '0x040010e0 in ?? () 'を返します。私がそれを始める唯一の方法は「続ける」ことです。今のところ、私はvalgrindシェルの 'Cmd + c'で止めることができますが、より良い方法が必要です。 – Achim

関連する問題