{"id":361253,"date":"2024-05-21T01:09:56","date_gmt":"2024-05-21T01:09:56","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=361253"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-21T01:09:56","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=361253","title":{"rendered":"<span>\u0424\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u043b\u043e\u0433\u0438 \u0441\u0430\u043d\u0438\u0442\u0430\u0439\u0437\u0435\u0440\u043e\u0432 \u0438 valgrind \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 Qt<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h3>\u041c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f <\/h3>\n<p>\u041f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438 \u043a\u043e\u0434\u0430 \u043d\u0430 \u0421 \u0438 C++ \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0443\u0442\u0435\u0447\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0443\u043c\u043d\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438, \u0442\u043e \u043e\u0442 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0432\u044b \u043d\u0435 \u0437\u0430\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u043d\u044b. \u0414\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043a\u043e\u0434\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b:  <\/p>\n<ol>\n<li>\n<p>\u0441\u0430\u043d\u0438\u0442\u0430\u0439\u0437\u0435\u0440\u044b;<\/p>\n<\/li>\n<li>\n<p> valgrind.  <\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0435\u0440\u0432\u044b\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043d\u043e \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0412\u0442\u043e\u0440\u043e\u0439  \u0443\u0434\u043e\u0431\u0435\u043d \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0431\u0435\u0437 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438, \u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u0434\u0430, \u0447\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043f\u0440\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>\u041d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0432\u044b\u0431\u043e\u0440\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u0447\u0442\u043e \u0432\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0443 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0439). \u0422.\u043a. \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u043d\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0442\u043e  \u043b\u043e\u0433\u0438 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0442\u044b\u0441\u044f\u0447\u0430\u043c\u0438 \u0441\u0442\u0440\u043e\u043a \u043e\u0434\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u041e\u0434\u043d\u0430\u043a\u043e, \u0441\u0430\u043d\u0438\u0442\u0430\u0439\u0437\u0435\u0440\u044b \u0438 valgrind \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e  \u0432 \u043b\u043e\u0433 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u043c \u0432\u0430\u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438.<\/p>\n<p> <strong>\u041f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435:<\/strong><\/p>\n<ul>\n<li>\n<p> \u0441\u0432\u0435\u0436\u0438\u0439 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 linux<\/p>\n<\/li>\n<li>\n<p> gcc \u0438\u043b\u0438 clang<\/p>\n<\/li>\n<li>\n<p> valgrind  <\/p>\n<\/li>\n<li>\n<p> llvm<\/p>\n<\/li>\n<li>\n<p> Qt5 (\u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430)<\/p>\n<\/li>\n<\/ul>\n<h3>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b <\/h3>\n<p>\u0422\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0435 \u043e\u043a\u043d\u043e QMainWindow. <\/p>\n<p> <em>CMakeLists.txt<\/em><\/p>\n<pre><code class=\"cmake\">cmake_minimum_required(VERSION 3.10) project(cmake-qt-widgets LANGUAGES CXX) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(QT_COMPONENTS     Core     Widgets) find_package( Qt5 REQUIRED COMPONENTS     ${QT_COMPONENTS} ) find_package(Threads) add_executable(${PROJECT_NAME}   main.cpp )  target_link_libraries(${PROJECT_NAME} PUBLIC     Qt5::Core     Qt5::Widgets     )<\/code><\/pre>\n<p> <em>main.cpp<\/em><\/p>\n<pre><code class=\"cpp\">#include &lt;QApplication> #include &lt;QMainWindow>  int main(int argc, char *argv[]) {     QApplication a(argc, argv);     QMainWindow m ;     m.show();     return a.exec(); }<\/code><\/pre>\n<h3> \u0417\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0434 valgrind<\/h3>\n<p> \u0421\u043e\u0431\u0435\u0440\u0435\u043c \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0435\u0433\u043e \u043f\u043e\u0434 valgrind.<\/p>\n<pre><code class=\"bash\"># bin\/bash  export DIR=\"_debug_wid\" if ! [[ -d \"$DIR\" ]]; then mkdir \"$DIR\" fi;  cd $DIR  cmake -DCMAKE_BUILD_TYPE=Debug ..\/cmake-qt-widgets  make -j$(nproc)   valgrind --leak-check=full --error-limit=no --log-file=qt-widgets-raw.log .\/cmake-qt-widgets<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043e\u0431\u0440\u0430\u0442\u0438\u043c \u0441\u0432\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043b\u043e\u0433\u0438 cmake-qt-widgets-raw.log, \u0443\u0432\u0438\u0434\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 89839 \u0441\u0442\u0440\u043e\u043a \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0434\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043b\u043e\u0433\u0430:<\/p>\n<pre><code>==15974== 75,104 bytes in 2 blocks are still reachable in loss record 6,397 of 6,397 ==15974==    at 0x483B7F3: malloc (in \/usr\/lib\/x86_64-linux-gnu\/valgrind\/vgpreload_memcheck-amd64-linux.so) ==15974==    by 0x846EB78: ??? (in \/usr\/lib\/x86_64-linux-gnu\/libfreetype.so.6.17.1) ==15974==    by 0x84BA7B6: ??? (in \/usr\/lib\/x86_64-linux-gnu\/libfreetype.so.6.17.1) ==15974==    by 0x8470073: FT_Load_Glyph (in \/usr\/lib\/x86_64-linux-gnu\/libfreetype.so.6.17.1) ==15974==    by 0xAC020AE: ??? (in \/usr\/lib\/x86_64-linux-gnu\/libcairo.so.2.11600.0) ==15974==    by 0xAC02F0C: ??? (in \/usr\/lib\/x86_64-linux-gnu\/libcairo.so.2.11600.0) ==15974==    by 0xABAC53E: ??? (in \/usr\/lib\/x86_64-linux-gnu\/libcairo.so.2.11600.0) ==15974==    by 0xABAC77C: cairo_scaled_font_glyph_extents (in \/usr\/lib\/x86_64-linux-gnu\/libcairo.so.2.11600.0) ==15974==    by 0xAB0F690: ??? (in \/usr\/lib\/x86_64-linux-gnu\/libpangocairo-1.0.so.0.4400.7) ==15974==    by 0xAA6BCF4: pango_glyph_string_extents_range (in \/usr\/lib\/x86_64-linux-gnu\/libpango-1.0.so.0.4400.7) ==15974==    by 0xAA76EA4: ??? (in \/usr\/lib\/x86_64-linux-gnu\/libpango-1.0.so.0.4400.7) 89825 ==15974==    by 0xAA77208: ??? (in \/usr\/lib\/x86_64-linux-gnu\/libpango-1.0.so.0.4400.7) ==15974== ==15974== LEAK SUMMARY: ==15974==    definitely lost: 2,816 bytes in 5 blocks ==15974==    indirectly lost: 15,015 bytes in 625 blocks ==15974==      possibly lost: 2,330 bytes in 31 blocks ==15974==    still reachable: 1,433,061 bytes in 18,173 blocks ==15974==                       of which reachable via heuristic: ==15974==                         length64           : 6,848 bytes in 77 blocks ==15974==                         newarray           : 1,904 bytes in 39 blocks ==15974==         suppressed: 0 bytes in 0 blocks ==15974== ==15974== Use --track-origins=yes to see where uninitialised values come from ==15974== For lists of detected and suppressed errors, rerun with: -s ==15974== ERROR SUMMARY: 41 errors from 41 contexts (suppressed: 0 from 0)<\/code><\/pre>\n<p>\u041c\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0443\u0440\u043e\u0432\u043d\u044f \u00abHello world\u00bb, \u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445. \u041c\u044b \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0433\u043e\u0440\u0438\u043c \u0436\u0435\u043b\u0430\u043d\u0438\u0435\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u044d\u0442\u0438\u043c\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438, \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0433 \u0440\u0435\u043f\u043e\u0440\u0442\u043e\u0432, \u043d\u043e &#8230; \u043f\u043e\u0442\u043e\u043c. \u0410 \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u043f\u043b\u0430\u043d\u0430\u0445, \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u0441\u043a\u0440\u044b\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445.<\/p>\n<h3> \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0434\u043b\u044f valgrind<\/h3>\n<p> \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 valgrind \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0444\u043b\u0430\u0433 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 &#8212;gen-suppressions=all:<\/p>\n<pre><code class=\"bash\"># bin\/bash  export DIR=\"_debug_wid\" if ! [[ -d \"$DIR\" ]]; then mkdir \"$DIR\" fi;  cd $DIR  cmake -DCMAKE_BUILD_TYPE=Debug ..\/cmake-qt-widgets  make -j$(nproc)   valgrind --leak-check=full --error-limit=no --gen-suppressions=all --log-file=qt-widgets-gen.log .\/cmake-qt-widgets<\/code><\/pre>\n<p>\u041b\u043e\u0433 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0431\u043b\u043e\u043a\u043e\u0432 \u0432\u0438\u0434\u0430:<\/p>\n<pre><code>{     &lt;insert_a_suppression_name_here     Memcheck:Cond     obj:\/usr\/lib\/x86_64-linux-gnu\/libgtk-x11-2.0.so.0.2400.32     fun:g_closure_invoke     obj:\/usr\/lib\/x86_64-linux-gnu\/libgobject-2.0.so.0.6400.6     fun:g_signal_emit_valist     fun:g_signal_emit_by_name     fun:g_object_set_valist     fun:g_object_set     obj:\/usr\/lib\/x86_64-linux-gnu\/qt5\/plugins\/styles\/libqgtk2style.so     obj:\/usr\/lib\/x86_64-linux-gnu\/qt5\/plugins\/styles\/libqgtk2style.so     fun:_ZN13QStyleFactory6createERK7QString     fun:_ZN12QApplication5styleEv     fun:_ZN19QApplicationPrivate10initializeEv  } <\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u043e\u0442\u0447\u0435\u0442\u0430 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0432\u0438\u0434\u0430\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043b\u043e\u0433\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 (https:\/\/valgrind.org\/docs\/manual\/manual-core.html#manual-core.suppress). \u041d\u0430\u0441 \u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u0438\u0435 \u0432\u0441\u0435\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b qwidget.supp \u0438 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c \u0432\u044b\u0432\u043e\u0434 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043b\u043e\u0433 :<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>{    &lt;insert_a_suppression_name_here>    Memcheck:Leak    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libgtk-x11* }<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0412\u0441\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>{    &lt;insert_a_suppression_name_here>    Memcheck:Leak    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libgtk-x11* } {      &lt;insert_a_suppression_name_here>    Memcheck:Cond    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libgtk-x11* } {    &lt;insert_a_suppression_name_here>    Memcheck:Leak    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libcairo* } {      &lt;insert_a_suppression_name_here>    Memcheck:Cond    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libcairo* } {    &lt;insert_a_suppression_name_here>    Memcheck:Leak    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libX11* } {      &lt;insert_a_suppression_name_here>    Memcheck:Cond    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libX11* } {    &lt;insert_a_suppression_name_here>    Memcheck:Leak    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libglib* } {      &lt;insert_a_suppression_name_here>    Memcheck:Cond    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libglib* } {    &lt;insert_a_suppression_name_here>    Memcheck:Leak    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libfontconfig* } {      &lt;insert_a_suppression_name_here>    Memcheck:Cond    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libfontconfig* } {    &lt;insert_a_suppression_name_here>    Memcheck:Leak    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libQt5* } {      &lt;insert_a_suppression_name_here>    Memcheck:Cond    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libQt5* }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p> \u0417\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0444\u043b\u0430\u0433\u0430 \u2013suppressions, \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u043a\u0430\u0436\u0435\u043c \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 \u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438 qwidget.supp<\/p>\n<pre><code class=\"bash\"># bin\/bash  export DIR=\"_debug_wid\" if ! [[ -d \"$DIR\" ]]; then mkdir \"$DIR\" fi;  cd $DIR  cmake -DCMAKE_BUILD_TYPE=Debug ..\/cmake-qt-widgets  make -j$(nproc)   valgrind --leak-check=full --error-limit=no --suppressions=..\/qwidget.supp --log-file=qt-widgets-test.log .\/cmake-qt-widgets<\/code><\/pre>\n<p> \u041b\u043e\u0433 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043a\u0430\u0445<\/p>\n<pre><code>==74932== HEAP SUMMARY: ==74932==     in use at exit: 1,694,522 bytes in 19,826 blocks ==74932==   total heap usage: 71,338 allocs, 51,512 frees, 1,957,135,144 bytes allocated ==74932==  ==74932== LEAK SUMMARY: ==74932==    definitely lost: 0 bytes in 0 blocks ==74932==    indirectly lost: 0 bytes in 0 blocks ==74932==      possibly lost: 0 bytes in 0 blocks ==74932==    still reachable: 0 bytes in 0 blocks ==74932==                       of which reachable via heuristic: ==74932==                         length64           : 6,848 bytes in 77 blocks ==74932==                         newarray           : 1,904 bytes in 39 blocks ==74932==         suppressed: 1,453,330 bytes in 18,834 blocks ==74932==  ==74932== For lists of detected and suppressed errors, rerun with: -s ==74932== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 41 from 41)<\/code><\/pre>\n<p> \u0422\u0435\u043f\u0435\u0440\u044c \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u043c\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u043e\u0432\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0442\u0443\u0434\u0430 \u0443\u0442\u0435\u0447\u043a\u0443 \u043f\u0430\u043c\u044f\u0442\u0438:<\/p>\n<pre><code class=\"cpp\">int main(int argc, char *argv[]) {     QApplication a(argc, argv);     QMainWindow m ;     m.show();     std::printf( \"Run!\\n\");     int* leak = new int(5);     leak = nullptr;     return a.exec(); }<\/code><\/pre>\n<p>\u0421\u0431\u043e\u0440\u043a\u0430 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0432 \u043b\u043e\u0433 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043d\u0430\u0448\u0435\u0439 \u043e\u0448\u0438\u0431\u043a\u0435:<\/p>\n<pre><code>4 bytes in 1 blocks are definitely lost in loss record 41 of 6,398 at 0x483BE63: operator new(unsigned long) (in \/usr\/lib\/x86_64-linux-gnu\/valgrind\/vgpreload_memcheck-amd64-linux.so) by 0x10932D: main (main.cpp:16) .... ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 41 from 41)<\/code><\/pre>\n<h3> \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u0441\u0430\u043d\u0438\u0442\u0430\u0439\u0437\u0435\u0440\u043e\u0432<\/h3>\n<p> \u0423\u0434\u0430\u043b\u0438\u043c \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u0441 \u0443\u0442\u0435\u0447\u043a\u0443 \u043f\u0430\u043c\u044f\u0442\u0438:<\/p>\n<pre><code>int* leak = new int(5); leak = nullptr;<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0434 \u0441\u0430\u043d\u0438\u0442\u0430\u0439\u0437\u0435\u0440\u0430\u043c\u0438 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u044b (CFLAGS, CXXFLAGS, LDFLAGS, LSAN_OPTIONS, ASAN_OPTIONS, UBSAN_OPTIONS):<\/p>\n<pre><code># bin\/bash  CUR_PATH=$PWD PROJECT=\"qwgt\" echo $CUR_PATH  export DIR=\"_debug_$PROJECT\" if ! [[ -d \"$DIR\" ]]; then mkdir \"$DIR\" fi;  export DIR_SAN=\"_sanit_$PROJECT\" if ! [[ -d \"$DIR_SAN\" ]]; then mkdir \"$DIR_SAN\" fi;  cd $DIR  export CFLAGS=\"$CFLAGS -g -fsanitize=address,undefined\" export CXXFLAGS=\"$CXXFLAGS $CFLAGS\" export LDFLAGS=\"-fsanitize=address,undefined\" export LSAN_OPTIONS=\"fast_unwind_on_malloc=0\" export ASAN_OPTIONS=\"halt_on_error=0 detect_leaks=1\" export UBSAN_OPTIONS=\"print_stacktrace=1\" echo 'set env done.'  cmake -DCMAKE_BUILD_TYPE=Debug -DCHECK_COVER=ON -DUSE_SANITIZERS=ON .. cmake --build . -- -j$(nproc)  cd .\/cmake-qt-widgets .\/cmake-qt-widgets 2> $CUR_PATH\/$DIR_SAN\/sanit.log<\/code><\/pre>\n<p>  \u0412 \u043b\u043e\u0433\u0435 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u044b\u0441\u044f\u0447 \u0441\u0442\u0440\u043e\u043a \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f:<\/p>\n<pre><code>Indirect leak of 3 byte(s) in 1 object(s) allocated from:     #27 0x7fbee755f39c in QApplicationPrivate::initialize() (\/lib\/x86_64-linux-gnu\/libQt5Widgets.so.5+0x17139c)     #28 0x7fbee755f3f7 in QApplicationPrivate::init() (\/lib\/x86_64-linux-gnu\/libQt5Widgets.so.5+0x1713f7)     #29 0x5561cf0908e3 in main \/media\/build\/35CA936957ED7A1D\/cppProj\/cmake-code-cov-sanit\/cmake-qt-widgets\/main.cpp:12  SUMMARY: AddressSanitizer: 17831 byte(s) leaked in 630 allocation(s).<\/code><\/pre>\n<p> \u0422.\u0435. \u0441\u0430\u043d\u0438\u0442\u0430\u0439\u0437\u0435\u0440\u044b, \u043a\u0430\u043a \u0438 valgrind,  \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u0443\u044e\u0442 \u0440\u044f\u0434 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445, \u043d\u043e \u043c\u044b \u0443\u0436\u0435 \u043c\u043e\u0440\u0430\u043b\u044c\u043d\u043e \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u044d\u0442\u043e\u043c\u0443 \u0438, \u0432\u0441\u0435 \u0435\u0449\u0435, \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0441\u0434\u0435\u043b\u0430\u043d\u044b\u0445 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430\u043c\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b leak_suppr.txt  \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u043c:<\/p>\n<pre><code># This is a known leak. leak:lsan_error::error leak:QApplicationPrivate::init leak:libgobject leak:libpango leak:libfontconfig<\/code><\/pre>\n<p> \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0441\u0430\u043d\u0438\u0442\u0430\u0439\u0437\u0435\u0440\u043e\u0432  (<a href=\"https:\/\/clang.llvm.org\/docs\/LeakSanitizer.html\">https:\/\/clang.llvm.org\/docs\/LeakSanitizer.html<\/a>; <a href=\"https:\/\/github.com\/google\/sanitizers\/wiki\/AddressSanitizerLeakSanitizer\">https:\/\/github.com\/google\/sanitizers\/wiki\/AddressSanitizerLeakSanitizer<\/a>) \u043e \u0432\u0438\u0434\u0430\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043b\u043e\u0433\u043e\u0432 \u0438\u043d\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0435 \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e, \u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0442\u0443\u0442 (<a href=\"https:\/\/sources.debian.org\/src\/qtwebengine-opensource-src\/5.7.1+dfsg-6.1\/src\/3rdparty\/chromium\/build\/sanitizers\/lsan_suppressions.cc\/\">https:\/\/sources.debian.org\/src\/qtwebengine-opensource-src\/5.7.1+dfsg-6.1\/src\/3rdparty\/chromium\/build\/sanitizers\/lsan_suppressions.cc\/<\/a> ; https:\/\/chromium.googlesource.com\/external\/github.com\/google\/proto-quic\/+\/0a5589a3da02d9e7eacf17dbef3ddaefc08b3f58\/src\/build\/sanitizers\/lsan_suppressions.cc). \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f LSAN_OPTIONS \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 \u043e \u043d\u0430\u0448\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u0435 suppressions=$CUR_PATH\/leak_suppr.txt \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043d\u0430\u0448 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"bash\"># bin\/bash  CUR_PATH=$PWD PROJECT=\"qwgt\" echo $CUR_PATH  export DIR=\"_debug_$PROJECT\" if ! [[ -d \"$DIR\" ]]; then mkdir \"$DIR\" fi;  export DIR_SAN=\"_sanit_$PROJECT\" if ! [[ -d \"$DIR_SAN\" ]]; then mkdir \"$DIR_SAN\" fi;  cd $DIR  export CFLAGS=\"$CFLAGS -g -fsanitize=address,undefined\" export CXXFLAGS=\"$CXXFLAGS $CFLAGS\" export LDFLAGS=\"-fsanitize=address,undefined\" export LSAN_OPTIONS=\"fast_unwind_on_malloc=0 suppressions=$CUR_PATH\/leak_suppr.txt\" export ASAN_OPTIONS=\"halt_on_error=0 detect_leaks=1\" export UBSAN_OPTIONS=\"print_stacktrace=1\" echo 'set env done.'  cmake -DCMAKE_BUILD_TYPE=Debug -DCHECK_COVER=ON -DUSE_SANITIZERS=ON .. cmake --build . -- -j$(nproc)  cd .\/cmake-qt-widgets .\/cmake-qt-widgets 2> $CUR_PATH\/$DIR_SAN\/sanit.log<\/code><\/pre>\n<p>   \u041c\u044b \u043e\u043f\u044f\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043b\u043e\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043a\u0430\u0445:<\/p>\n<pre><code>-----------------------------------------------------  Suppressions used:    count      bytes template      630      17831 libfontconfig -----------------------------------------------------<\/code><\/pre>\n<p> \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0435\u0440\u043d\u0435\u043c \u043d\u0430\u0448 \u043a\u043e\u0434 \u0441 \u0443\u0442\u0435\u0447\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438:<\/p>\n<pre><code>int* leak = new int(5); leak = nullptr;<\/code><\/pre>\n<p> \u0421\u043e\u0431\u0435\u0440\u0435\u043c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u043a\u043e\u0434 \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445. \u0412 \u043b\u043e\u0433\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e \u043d\u0430\u0448\u0435\u0439 \u043e\u0448\u0438\u0431\u043a\u0435:<\/p>\n<pre><code>  =================================================================   ==18029==ERROR: LeakSanitizer: detected memory leaks      Direct leak of 4 byte(s) in 1 object(s) allocated from:       #0 0x7f915636c587 in operator new(unsigned long) ..\/..\/..\/..\/src\/libsani    tizer\/asan\/asan_new_delete.cc:104       #1 0x5644af09eb22 in main \/media\/build\/35CA936957ED7A1D\/cppProj\/cmake-co    de-cov-sanit\/cmake-qt-widgets\/main.cpp:16       #2 0x7f91541dc082 in __libc_start_main ..\/csu\/libc-start.c:308       #3 0x5644af09e73d in _start (\/media\/build\/35CA936957ED7A1D\/cppProj\/cmake    -code-cov-sanit\/_debug_qwgt\/cmake-qt-widgets\/cmake-code-cov-s    anit-qt-widgets+0x373d)     -----------------------------------------------------   Suppressions used:     count      bytes template       630      17831 libfontconfig   -----------------------------------------------------      SUMMARY: AddressSanitizer: 4 byte(s) leaked in 1 allocation(s).<\/code><\/pre>\n<h3> \u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p> \u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043e\u0434\u0430 \u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0442\u0435\u0441\u0442\u043e\u0432 \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 CI \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0447\u0442\u043e, \u0431\u0435\u0437 \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u044f, \u043f\u043e\u0432\u044b\u0441\u0438\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u0430\u0448\u0435\u0433\u043e \u041f\u041e \u0438 \u043e\u0442\u043a\u0440\u043e\u0435\u0442 \u043d\u043e\u0432\u044b\u0435 \u0433\u0440\u0430\u043d\u0438 \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0432\u0430\u043c\u0438, \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. <\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/776528\/\"> https:\/\/habr.com\/ru\/articles\/776528\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h3>\u041c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f <\/h3>\n<p>\u041f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438 \u043a\u043e\u0434\u0430 \u043d\u0430 \u0421 \u0438 C++ \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0443\u0442\u0435\u0447\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0443\u043c\u043d\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438, \u0442\u043e \u043e\u0442 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0432\u044b \u043d\u0435 \u0437\u0430\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u043d\u044b. \u0414\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043a\u043e\u0434\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b:  <\/p>\n<ol>\n<li>\n<p>\u0441\u0430\u043d\u0438\u0442\u0430\u0439\u0437\u0435\u0440\u044b;<\/p>\n<\/li>\n<li>\n<p> valgrind.  <\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0435\u0440\u0432\u044b\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043d\u043e \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0412\u0442\u043e\u0440\u043e\u0439  \u0443\u0434\u043e\u0431\u0435\u043d \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0431\u0435\u0437 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438, \u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u0434\u0430, \u0447\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043f\u0440\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>\u041d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0432\u044b\u0431\u043e\u0440\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u0447\u0442\u043e \u0432\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0443 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0439). \u0422.\u043a. \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u043d\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0442\u043e  \u043b\u043e\u0433\u0438 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0442\u044b\u0441\u044f\u0447\u0430\u043c\u0438 \u0441\u0442\u0440\u043e\u043a \u043e\u0434\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u041e\u0434\u043d\u0430\u043a\u043e, \u0441\u0430\u043d\u0438\u0442\u0430\u0439\u0437\u0435\u0440\u044b \u0438 valgrind \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e  \u0432 \u043b\u043e\u0433 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u043c \u0432\u0430\u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438.<\/p>\n<p> <strong>\u041f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435:<\/strong><\/p>\n<ul>\n<li>\n<p> \u0441\u0432\u0435\u0436\u0438\u0439 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 linux<\/p>\n<\/li>\n<li>\n<p> gcc \u0438\u043b\u0438 clang<\/p>\n<\/li>\n<li>\n<p> valgrind  <\/p>\n<\/li>\n<li>\n<p> llvm<\/p>\n<\/li>\n<li>\n<p> Qt5 (\u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430)<\/p>\n<\/li>\n<\/ul>\n<h3>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b <\/h3>\n<p>\u0422\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0435 \u043e\u043a\u043d\u043e QMainWindow. <\/p>\n<p> <em>CMakeLists.txt<\/em><\/p>\n<pre><code class=\"cmake\">cmake_minimum_required(VERSION 3.10) project(cmake-qt-widgets LANGUAGES CXX) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(QT_COMPONENTS     Core     Widgets) find_package( Qt5 REQUIRED COMPONENTS     ${QT_COMPONENTS} ) find_package(Threads) add_executable(${PROJECT_NAME}   main.cpp )  target_link_libraries(${PROJECT_NAME} PUBLIC     Qt5::Core     Qt5::Widgets     )<\/code><\/pre>\n<p> <em>main.cpp<\/em><\/p>\n<pre><code class=\"cpp\">#include &lt;QApplication> #include &lt;QMainWindow>  int main(int argc, char *argv[]) {     QApplication a(argc, argv);     QMainWindow m ;     m.show();     return a.exec(); }<\/code><\/pre>\n<h3> \u0417\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0434 valgrind<\/h3>\n<p> \u0421\u043e\u0431\u0435\u0440\u0435\u043c \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0435\u0433\u043e \u043f\u043e\u0434 valgrind.<\/p>\n<pre><code class=\"bash\"># bin\/bash  export DIR=\"_debug_wid\" if ! [[ -d \"$DIR\" ]]; then mkdir \"$DIR\" fi;  cd $DIR  cmake -DCMAKE_BUILD_TYPE=Debug ..\/cmake-qt-widgets  make -j$(nproc)   valgrind --leak-check=full --error-limit=no --log-file=qt-widgets-raw.log .\/cmake-qt-widgets<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043e\u0431\u0440\u0430\u0442\u0438\u043c \u0441\u0432\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043b\u043e\u0433\u0438 cmake-qt-widgets-raw.log, \u0443\u0432\u0438\u0434\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 89839 \u0441\u0442\u0440\u043e\u043a \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0434\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043b\u043e\u0433\u0430:<\/p>\n<pre><code>==15974== 75,104 bytes in 2 blocks are still reachable in loss record 6,397 of 6,397 ==15974==    at 0x483B7F3: malloc (in \/usr\/lib\/x86_64-linux-gnu\/valgrind\/vgpreload_memcheck-amd64-linux.so) ==15974==    by 0x846EB78: ??? (in \/usr\/lib\/x86_64-linux-gnu\/libfreetype.so.6.17.1) ==15974==    by 0x84BA7B6: ??? (in \/usr\/lib\/x86_64-linux-gnu\/libfreetype.so.6.17.1) ==15974==    by 0x8470073: FT_Load_Glyph (in \/usr\/lib\/x86_64-linux-gnu\/libfreetype.so.6.17.1) ==15974==    by 0xAC020AE: ??? (in \/usr\/lib\/x86_64-linux-gnu\/libcairo.so.2.11600.0) ==15974==    by 0xAC02F0C: ??? (in \/usr\/lib\/x86_64-linux-gnu\/libcairo.so.2.11600.0) ==15974==    by 0xABAC53E: ??? (in \/usr\/lib\/x86_64-linux-gnu\/libcairo.so.2.11600.0) ==15974==    by 0xABAC77C: cairo_scaled_font_glyph_extents (in \/usr\/lib\/x86_64-linux-gnu\/libcairo.so.2.11600.0) ==15974==    by 0xAB0F690: ??? (in \/usr\/lib\/x86_64-linux-gnu\/libpangocairo-1.0.so.0.4400.7) ==15974==    by 0xAA6BCF4: pango_glyph_string_extents_range (in \/usr\/lib\/x86_64-linux-gnu\/libpango-1.0.so.0.4400.7) ==15974==    by 0xAA76EA4: ??? (in \/usr\/lib\/x86_64-linux-gnu\/libpango-1.0.so.0.4400.7) 89825 ==15974==    by 0xAA77208: ??? (in \/usr\/lib\/x86_64-linux-gnu\/libpango-1.0.so.0.4400.7) ==15974== ==15974== LEAK SUMMARY: ==15974==    definitely lost: 2,816 bytes in 5 blocks ==15974==    indirectly lost: 15,015 bytes in 625 blocks ==15974==      possibly lost: 2,330 bytes in 31 blocks ==15974==    still reachable: 1,433,061 bytes in 18,173 blocks ==15974==                       of which reachable via heuristic: ==15974==                         length64           : 6,848 bytes in 77 blocks ==15974==                         newarray           : 1,904 bytes in 39 blocks ==15974==         suppressed: 0 bytes in 0 blocks ==15974== ==15974== Use --track-origins=yes to see where uninitialised values come from ==15974== For lists of detected and suppressed errors, rerun with: -s ==15974== ERROR SUMMARY: 41 errors from 41 contexts (suppressed: 0 from 0)<\/code><\/pre>\n<p>\u041c\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0443\u0440\u043e\u0432\u043d\u044f \u00abHello world\u00bb, \u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445. \u041c\u044b \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0433\u043e\u0440\u0438\u043c \u0436\u0435\u043b\u0430\u043d\u0438\u0435\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u044d\u0442\u0438\u043c\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438, \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0433 \u0440\u0435\u043f\u043e\u0440\u0442\u043e\u0432, \u043d\u043e &#8230; \u043f\u043e\u0442\u043e\u043c. \u0410 \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u043f\u043b\u0430\u043d\u0430\u0445, \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u0441\u043a\u0440\u044b\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445.<\/p>\n<h3> \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0434\u043b\u044f valgrind<\/h3>\n<p> \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 valgrind \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0444\u043b\u0430\u0433 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 &#8212;gen-suppressions=all:<\/p>\n<pre><code class=\"bash\"># bin\/bash  export DIR=\"_debug_wid\" if ! [[ -d \"$DIR\" ]]; then mkdir \"$DIR\" fi;  cd $DIR  cmake -DCMAKE_BUILD_TYPE=Debug ..\/cmake-qt-widgets  make -j$(nproc)   valgrind --leak-check=full --error-limit=no --gen-suppressions=all --log-file=qt-widgets-gen.log .\/cmake-qt-widgets<\/code><\/pre>\n<p>\u041b\u043e\u0433 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0431\u043b\u043e\u043a\u043e\u0432 \u0432\u0438\u0434\u0430:<\/p>\n<pre><code>{     &lt;insert_a_suppression_name_here     Memcheck:Cond     obj:\/usr\/lib\/x86_64-linux-gnu\/libgtk-x11-2.0.so.0.2400.32     fun:g_closure_invoke     obj:\/usr\/lib\/x86_64-linux-gnu\/libgobject-2.0.so.0.6400.6     fun:g_signal_emit_valist     fun:g_signal_emit_by_name     fun:g_object_set_valist     fun:g_object_set     obj:\/usr\/lib\/x86_64-linux-gnu\/qt5\/plugins\/styles\/libqgtk2style.so     obj:\/usr\/lib\/x86_64-linux-gnu\/qt5\/plugins\/styles\/libqgtk2style.so     fun:_ZN13QStyleFactory6createERK7QString     fun:_ZN12QApplication5styleEv     fun:_ZN19QApplicationPrivate10initializeEv  } <\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u043a\u0440\u044b\u0442\u0438\u0435 \u043e\u0442\u0447\u0435\u0442\u0430 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0432\u0438\u0434\u0430\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043b\u043e\u0433\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 (https:\/\/valgrind.org\/docs\/manual\/manual-core.html#manual-core.suppress). \u041d\u0430\u0441 \u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u0438\u0435 \u0432\u0441\u0435\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b qwidget.supp \u0438 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c \u0432\u044b\u0432\u043e\u0434 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043b\u043e\u0433 :<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code>{    &lt;insert_a_suppression_name_here>    Memcheck:Leak    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libgtk-x11* }<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0412\u0441\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>{    &lt;insert_a_suppression_name_here>    Memcheck:Leak    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libgtk-x11* } {      &lt;insert_a_suppression_name_here>    Memcheck:Cond    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libgtk-x11* } {    &lt;insert_a_suppression_name_here>    Memcheck:Leak    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libcairo* } {      &lt;insert_a_suppression_name_here>    Memcheck:Cond    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libcairo* } {    &lt;insert_a_suppression_name_here>    Memcheck:Leak    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libX11* } {      &lt;insert_a_suppression_name_here>    Memcheck:Cond    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libX11* } {    &lt;insert_a_suppression_name_here>    Memcheck:Leak    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libglib* } {      &lt;insert_a_suppression_name_here>    Memcheck:Cond    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libglib* } {    &lt;insert_a_suppression_name_here>    Memcheck:Leak    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libfontconfig* } {      &lt;insert_a_suppression_name_here>    Memcheck:Cond    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libfontconfig* } {    &lt;insert_a_suppression_name_here>    Memcheck:Leak    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libQt5* } {      &lt;insert_a_suppression_name_here>    Memcheck:Cond    ...    obj:\/usr\/lib\/x86_64-linux-gnu\/libQt5* }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p> \u0417\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0444\u043b\u0430\u0433\u0430 \u2013suppressions, \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u043a\u0430\u0436\u0435\u043c \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 \u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438 qwidget.supp<\/p>\n<pre><code class=\"bash\"># bin\/bash  export DIR=\"_debug_wid\" if ! [[ -d \"$DIR\" ]]; then mkdir \"$DIR\" fi;  cd $DIR  cmake -DCMAKE_BUILD_TYPE=Debug ..\/cmake-qt-widgets  make -j$(nproc)   valgrind --leak-check=full --error-limit=no --suppressions=..\/qwidget.supp --log-file=qt-widgets-test.log .\/cmake-qt-widgets<\/code><\/pre>\n<p> \u041b\u043e\u0433 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043a\u0430\u0445<\/p>\n<pre><code>==74932== HEAP SUMMARY: ==74932==     in use at exit: 1,694,522 bytes in 19,826 blocks ==74932==   total heap usage: 71,338 allocs, 51,512 frees, 1,957,135,144 bytes allocated ==74932==  ==74932== LEAK SUMMARY: ==74932==    definitely lost: 0 bytes in 0 blocks ==74932==    indirectly lost: 0 bytes in 0 blocks ==74932==      possibly lost: 0 bytes in 0 blocks ==74932==    still reachable: 0 bytes in 0 blocks ==74932==                       of which reachable via heuristic: ==74932==                         length64           : 6,848 bytes in 77 blocks ==74932==                         newarray           : 1,904 bytes in 39 blocks ==74932==         suppressed: 1,453,330 bytes in 18,834 blocks ==74932==  ==74932== For lists of detected and suppressed errors, rerun with: -s ==74932== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 41 from 41)<\/code><\/pre>\n<p> \u0422\u0435\u043f\u0435\u0440\u044c \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u043c\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u043e\u0432\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0442\u0443\u0434\u0430 \u0443\u0442\u0435\u0447\u043a\u0443 \u043f\u0430\u043c\u044f\u0442\u0438:<\/p>\n<pre><code class=\"cpp\">int main(int argc, char *argv[]) {     QApplication a(argc, argv);     QMainWindow m ;     m.show();     std::printf( \"Run!\\n\");     int* leak = new int(5);     leak = nullptr;     return a.exec(); }<\/code><\/pre>\n<p>\u0421\u0431\u043e\u0440\u043a\u0430 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0432 \u043b\u043e\u0433 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043d\u0430\u0448\u0435\u0439 \u043e\u0448\u0438\u0431\u043a\u0435:<\/p>\n<pre><code>4 bytes in 1 blocks are definitely lost in loss record 41 of 6,398 at 0x483BE63: operator new(unsigned long) (in \/usr\/lib\/x86_64-linux-gnu\/valgrind\/vgpreload_memcheck-amd64-linux.so) by 0x10932D: main (main.cpp:16) .... ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 41 from 41)<\/code><\/pre>\n<h3> \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u0441\u0430\u043d\u0438\u0442\u0430\u0439\u0437\u0435\u0440\u043e\u0432<\/h3>\n<p> \u0423\u0434\u0430\u043b\u0438\u043c \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u0441 \u0443\u0442\u0435\u0447\u043a\u0443 \u043f\u0430\u043c\u044f\u0442\u0438:<\/p>\n<pre><code>int* leak = new int(5); leak = nullptr;<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0434 \u0441\u0430\u043d\u0438\u0442\u0430\u0439\u0437\u0435\u0440\u0430\u043c\u0438 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u044b (CFLAGS, CXXFLAGS, LDFLAGS, LSAN_OPTIONS, ASAN_OPTIONS, UBSAN_OPTIONS):<\/p>\n<pre><code># bin\/bash  CUR_PATH=$PWD PROJECT=\"qwgt\" echo $CUR_PATH  export<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-361253","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/361253","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=361253"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/361253\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=361253"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=361253"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=361253"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}