4

valgrindを使用してヒープ破損を検出してみたいと思います。次の破損「ユニットテスト」:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main()
{
   char * c = (char *) malloc(10) ;

   memset( c, 0xAB, 20 ) ;
   printf("not aborted\n") ;

   return 0 ;
}

valgrindがエラーで中止せず、メッセージを生成するだけであることに驚きました。

valgrind -q --leak-check = no a.out
==11097==サイズ4の無効な書き込み
== 11097 == 0x40061F:メイン(/home/hotellnx94/peeterj/tmp/a.out内)
== 11097 ==アドレス0x51c6048は、割り当てられたサイズ10のブロック内の8バイトです
== 11097 == 0x4A2058F:malloc(vg_replace_malloc.c:236)
== 11097 == by 0x400609:main(in /home/hotellnx94/peeterj/tmp/a.out)
..。
中止されません

エラー時に中止するvalgrindオプションが表示されません(gnu-libcのmcheckのように、スレッドセーフではないためmcheckを使用できません)。それが可能かどうか誰かが知っていますか(デーモンとして実行されるため、コードdup2の/ dev / nullへのstdoutであるため、レポートは役に立ちません。その行為の犯人を捕まえるか、それに近い方がいいです)。

4

1 に答える 1

3

valgrindにはそのようなオプションはありません。

非デーモンモード(デバッグモード)をデーモンに追加することを検討してください。

http://valgrind.org/docs/manual/mc-manual.html#mc-manual.clientreqs 4.6では、デバッグされたプログラムからvalgrind + memcheckへのいくつかのリクエストについて説明しているため、デーモンでこの一部を使用して、次の場所でチェックを行うことができます。固定コード位置。

于 2011-05-12T16:58:40.483 に答える