type | La description | Exemple |
---|---|---|
Test statique | Vérifier les défauts sans exécuter la source | Révision, vérification par compilateur |
Test dynamique | Exécutez la source et vérifiez les défauts | Test fonctionnel par testeur, contrôle par outil |
type | Exemple |
---|---|
Analyse statique | Compilateur, CppCheck et Sourcetrail |
Analyse dynamique | Valgrind |
type | La description |
---|---|
Memcheck | Principalement langage C, C++Rechercher des problèmes de gestion de la mémoire pour les programmes |
Cachegrind | Programme de profilage de trésorerie. CPU I1,Effectuez une simulation détaillée du cache D1 et L2. |
Callgrind | Les graphes d'appels peuvent être créés et visualisés avec la version étendue de Cachegrind. |
Massif | Profileur de mémoire de tas |
Helgrind | Débogueur de thread |
DRD | Langage C multithread, C++Détectez les erreurs dans le programme. |
#include <iostream>
#include <string>
int main() {
char *input = nullptr;
input = new char[ 5 ];
std::cin >> input;
std::cout << input << std::endl;
}
valgrind --leak-check=full -s ./Sample
==4952== Memcheck, a memory error detector
==4952== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==4952== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==4952== Command: ./Sample
==4952==
12345
==4952== Invalid write of size 1
==4952== at 0x491E56E: std::basic_istream<char, std::char_traits<char> >& std::operator>><char, std::char_traits<char> >(std::basic_istream<char, std::char_traits<char> >&, char*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28)
==4952== by 0x109215: main (in /usr/local/bin/valgrind/Sample)
==4952== Address 0x4daec85 is 0 bytes after a block of size 5 alloc'd
==4952== at 0x483C583: operator new[](unsignedlong)(in/usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==4952== by 0x1091FE: main (in /usr/local/bin/valgrind/Sample)
==4952==
==4952== Invalid read of size 1
==4952== at 0x483EF54: strlen (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==4952== by 0x498EB1D: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28)
==4952== by 0x10923A: main (in /usr/local/bin/valgrind/Sample)
==4952== Address 0x4daec85 is 0 bytes after a block of size 5 alloc'd
==4952== at 0x483C583: operator new[](unsignedlong)(in/usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==4952== by 0x1091FE: main (in /usr/local/bin/valgrind/Sample)
==4952==
Valeur d'entrée:12345
==4952==
==4952== HEAP SUMMARY:
==4952== in use at exit: 5 bytes in 1 blocks
==4952== total heap usage: 4 allocs, 3 frees, 74,757 bytes allocated
==4952==
==4952== 5 bytes in 1 blocks are definitely lost in loss record 1 of 1
==4952== at 0x483C583: operator new[](unsignedlong)(in/usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==4952== by 0x1091FE: main (in /usr/local/bin/valgrind/Sample)
==4952==
==4952== LEAK SUMMARY:
==4952== definitely lost: 5 bytes in 1 blocks
==4952== indirectly lost: 0 bytes in 0 blocks
==4952== possibly lost: 0 bytes in 0 blocks
==4952== still reachable: 0 bytes in 0 blocks
==4952== suppressed: 0 bytes in 0 blocks
==4952==
==4952== ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)
==4952==
==4952== 1 errors in context 1 of 3:
==4952== Invalid read of size 1
==4952== at 0x483EF54: strlen (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==4952== by 0x498EB1D: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28)
==4952== by 0x10923A: main (in /usr/local/bin/valgrind/Sample)
==4952== Address 0x4daec85 is 0 bytes after a block of size 5 alloc'd
==4952== at 0x483C583: operator new[](unsignedlong)(in/usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==4952== by 0x1091FE: main (in /usr/local/bin/valgrind/Sample)
==4952==
==4952==
==4952== 1 errors in context 2 of 3:
==4952== Invalid write of size 1
==4952== at 0x491E56E: std::basic_istream<char, std::char_traits<char> >& std::operator>><char, std::char_traits<char> >(std::basic_istream<char, std::char_traits<char> >&, char*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28)
==4952== by 0x109215: main (in /usr/local/bin/valgrind/Sample)
==4952== Address 0x4daec85 is 0 bytes after a block of size 5 alloc'd
==4952== at 0x483C583: operator new[](unsignedlong)(in/usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==4952== by 0x1091FE: main (in /usr/local/bin/valgrind/Sample)
==4952==
==4952== ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)
==9843== Memcheck, a memory error detector
==9843== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==9843== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==9843== Command: ./Sample
==9843==
12345
==9843== Invalid write of size 1
==9843== at 0x492056E: std::basic_istream<char, std::char_traits<char> >& std::operator>><char, std::char_traits<char> >(std::basic_istream<char, std::char_traits<char> >&, char*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28)
==9843== by 0x109140: main (Sample.cpp:6)
==9843== Address 0x4db0c85 is 0 bytes after a block of size 5 alloc'd
==9843== at 0x483C583: operator new[](unsignedlong)(in/usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9843== by 0x10912E: main (Sample.cpp:5)
==9843==
==9843== Invalid read of size 1
==9843== at 0x483EF54: strlen (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9843== by 0x4990B1D: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28)
==9843== by 0x109167: main (Sample.cpp:7)
==9843== Address 0x4db0c85 is 0 bytes after a block of size 5 alloc'd
==9843== at 0x483C583: operator new[](unsignedlong)(in/usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9843== by 0x10912E: main (Sample.cpp:5)
==9843==
Valeur d'entrée:12345
==9843==
==9843== HEAP SUMMARY:
==9843== in use at exit: 5 bytes in 1 blocks
==9843== total heap usage: 4 allocs, 3 frees, 74,757 bytes allocated
==9843==
==9843== 5 bytes in 1 blocks are definitely lost in loss record 1 of 1
==9843== at 0x483C583: operator new[](unsignedlong)(in/usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9843== by 0x10912E: main (Sample.cpp:5)
==9843==
==9843== LEAK SUMMARY:
==9843== definitely lost: 5 bytes in 1 blocks
==9843== indirectly lost: 0 bytes in 0 blocks
==9843== possibly lost: 0 bytes in 0 blocks
==9843== still reachable: 0 bytes in 0 blocks
==9843== suppressed: 0 bytes in 0 blocks
==9843==
==9843== ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)
==9843==
==9843== 1 errors in context 1 of 3:
==9843== Invalid read of size 1
==9843== at 0x483EF54: strlen (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9843== by 0x4990B1D: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28)
==9843== by 0x109167: main (Sample.cpp:7)
==9843== Address 0x4db0c85 is 0 bytes after a block of size 5 alloc'd
==9843== at 0x483C583: operator new[](unsignedlong)(in/usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9843== by 0x10912E: main (Sample.cpp:5)
==9843==
==9843==
==9843== 1 errors in context 2 of 3:
==9843== Invalid write of size 1
==9843== at 0x492056E: std::basic_istream<char, std::char_traits<char> >& std::operator>><char, std::char_traits<char> >(std::basic_istream<char, std::char_traits<char> >&, char*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28)
==9843== by 0x109140: main (Sample.cpp:6)
==9843== Address 0x4db0c85 is 0 bytes after a block of size 5 alloc'd
==9843== at 0x483C583: operator new[](unsignedlong)(in/usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9843== by 0x10912E: main (Sample.cpp:5)
==9843==
==9843== ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 0 from 0)
#include <iostream>
#include <fstream>
#include <string>
int main() {
std::ifstream ifs( "./sample.txt" );
if ( !ifs ) {
std::cerr << "Erreur d'ouverture de fichier" << std::endl;
return 1;
}
std::string str = "";
while ( getline( ifs, str ) ) {
std::cout << str << std::endl;
}
return 0;
}
valgrind --tool=massif --time-unit=B --stacks=yes ./SampleM
ms_print massif.out.pid
--------------------------------------------------------------------------------
Command: ./SampleM
Massif arguments: --time-unit=B --stacks=yes
ms_print arguments: massif.out.9470
--------------------------------------------------------------------------------
KB
82.96^ ##
| # ::::
| # ::::
| :::::::::# :::::
| ::: :: ::# :::::
| ::: :: ::# :::::
| ::: :: ::# :::::
| ::: :: ::# :::::
| ::: :: ::# :::::
| ::: :: ::# :::::
| ::: :: ::# :::::
| ::: :: ::# :::::
| ::: :: ::# :::::
| ::: :: ::# :::::
| ::: :: ::# :::::
| ::: :: ::# :::::
| ::: :: ::# :::::
| ::: :: ::# :::::
| ::: :: ::# :::::
| ::: :: ::# :::::
0 +----------------------------------------------------------------------->MB
0 3.317
Number of snapshots: 55
Detailed snapshots: [2, 48 (peak)]
--------------------------------------------------------------------------------
n time(B) total(B) useful-heap(B) extra-heap(B) stacks(B)
--------------------------------------------------------------------------------
0 0 0 0 0 0
1 83,280 3,712 0 0 3,712
2 134,240 1,328 0 0 1,328
00.00% (0B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
--------------------------------------------------------------------------------
n time(B) total(B) useful-heap(B) extra-heap(B) stacks(B)
--------------------------------------------------------------------------------
3 199,968 1,136 0 0 1,136
4 296,704 1,328 0 0 1,328
5 352,768 1,328 0 0 1,328
6 422,848 1,328 0 0 1,328
7 517,456 1,328 0 0 1,328
8 585,848 1,176 0 0 1,176
9 627,720 1,432 0 0 1,432
10 694,312 1,416 0 0 1,416
11 762,088 1,384 0 0 1,384
12 838,552 1,368 0 0 1,368
13 906,328 1,400 0 0 1,400
14 974,256 1,584 0 0 1,584
15 1,067,512 1,400 0 0 1,400
16 1,130,512 1,328 0 0 1,328
17 1,193,584 1,328 0 0 1,328
18 1,256,656 1,328 0 0 1,328
19 1,319,728 1,328 0 0 1,328
20 1,382,800 1,328 0 0 1,328
21 1,445,872 1,328 0 0 1,328
22 1,508,944 1,328 0 0 1,328
23 1,572,016 1,328 0 0 1,328
24 1,635,088 1,328 0 0 1,328
25 1,698,160 1,328 0 0 1,328
26 1,761,232 1,328 0 0 1,328
27 1,824,304 1,328 0 0 1,328
28 1,911,904 1,328 0 0 1,328
29 1,967,968 1,328 0 0 1,328
30 2,024,032 1,328 0 0 1,328
31 2,080,096 1,328 0 0 1,328
32 2,136,160 1,328 0 0 1,328
33 2,192,224 1,328 0 0 1,328
34 2,248,288 1,328 0 0 1,328
35 2,304,352 1,408 0 0 1,408
36 2,360,496 1,328 0 0 1,328
37 2,416,696 1,176 0 0 1,176
38 2,472,856 1,144 0 0 1,144
39 2,529,208 1,176 0 0 1,176
40 2,585,272 1,624 0 0 1,624
41 2,683,960 72,920 72,704 8 208
42 2,743,880 73,336 72,704 8 624
43 2,799,960 73,352 72,704 8 640
44 2,856,080 73,392 72,704 8 680
45 2,912,176 74,720 72,704 8 2,008
46 2,996,696 74,392 72,704 8 1,680
47 3,052,760 73,832 72,704 8 1,120
48 3,135,528 84,952 82,392 40 2,520
96.99% (82,392B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
->85.58% (72,704B) 0x48FAC19: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28)
| ->85.58% (72,704B) 0x4011B89: call_init.part.0 (dl-init.c:72)
| ->85.58% (72,704B) 0x4011C90: call_init (dl-init.c:30)
| ->85.58% (72,704B) 0x4011C90: _dl_init (dl-init.c:119)
| ->85.58% (72,704B) 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so)
|
->09.64% (8,192B) 0x495FDD3: std::basic_filebuf<char, std::char_traits<char> >::_M_allocate_internal_buffer() (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28)
| ->09.64% (8,192B) 0x4964006: std::basic_filebuf<char, std::char_traits<char> >::open(char const*, std::_Ios_Openmode) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28)
| ->09.64% (8,192B) 0x496493F: std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(char const*, std::_Ios_Openmode) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28)
| ->09.64% (8,192B) 0x109362: main (in /usr/local/bin/valgrind/SampleM)
|
->01.21% (1,024B) 0x4AD4E83: _IO_file_doallocate (filedoalloc.c:101)
| ->01.21% (1,024B) 0x4AE504F: _IO_doallocbuf (genops.c:347)
| ->01.21% (1,024B) 0x4AE40AF: _IO_file_overflow@@GLIBC_2.2.5 (fileops.c:745)
| ->01.21% (1,024B) 0x4AE2834: _IO_new_file_xsputn (fileops.c:1244)
| ->01.21% (1,024B) 0x4AE2834: _IO_file_xsputn@@GLIBC_2.2.5 (fileops.c:1197)
| ->01.21% (1,024B) 0x4AD6540: fwrite (iofwrite.c:39)
| ->01.21% (1,024B) 0x4987783: std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28)
| ->01.21% (1,024B) 0x109430: main (in /usr/local/bin/valgrind/SampleM)
|
->00.56% (472B) in 1+ places, all below ms_print's threshold (01.00%)
--------------------------------------------------------------------------------
n time(B) total(B) useful-heap(B) extra-heap(B) stacks(B)
--------------------------------------------------------------------------------
49 3,219,624 83,384 82,392 40 952
50 3,261,536 83,392 82,392 40 960
51 3,303,408 83,488 82,392 40 1,056
52 3,345,280 83,312 82,392 40 880
53 3,387,392 74,624 73,728 16 880
54 3,477,944 1,544 1,024 8 512
Recommended Posts