{"id":2612,"date":"2017-05-09T22:47:42","date_gmt":"2017-05-10T05:47:42","guid":{"rendered":"https:\/\/visualgdb.com\/w\/?p=2612"},"modified":"2025-09-09T19:29:55","modified_gmt":"2025-09-10T02:29:55","slug":"importing-esp32-projects-built-with-esp-idf-into-visualgdb","status":"publish","type":"post","link":"https:\/\/visualgdb.com\/tutorials\/esp32\/esp-idf\/","title":{"rendered":"Creating Advanced ESP32 Projects with ESP-IDF"},"content":{"rendered":"<p>This tutorial shows how to use the new advanced ESP-IDF project subsystem to create projects based on the ESP-IDF framework. Unlike MSBuild-based projects, ESP-IDF based projects do not require a specific version of ESP-IDF and provide the best level of integration with various ESP-IDF components and settings.<\/p>\n<p>Before you begin, install VisualGDB 5.4 or later and the\u00a0<a href=\"http:\/\/gnutoolchains.com\/esp32\">latest ESP32 toolchain<\/a>.<\/p>\n<p>We will now\u00a0build the basic &#8220;Hello, World&#8221; sample from ESP-IDF and show how to use VisualGDB to edit and debug it.<\/p>\n<ol>\n<li>Start Visual Studio and open the ESP-IDF Project Wizard:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/01-prj.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3812\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/01-prj.png\" alt=\"01-prj\" width=\"935\" height=\"513\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/01-prj.png 935w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/01-prj-300x165.png 300w\" sizes=\"(max-width: 935px) 100vw, 935px\" \/><\/a><\/li>\n<li>Select &#8220;Create a new project based on a sample project&#8221; and click &#8220;Next&#8221;:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/02-new.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3813\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/02-new.png\" alt=\"02-new\" width=\"856\" height=\"693\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/02-new.png 856w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/02-new-300x243.png 300w\" sizes=\"(max-width: 856px) 100vw, 856px\" \/><\/a><\/li>\n<li>On the next page select your ESP32 toolchain. If you don&#8217;t have it installed yet (or are not using the latest toolchain,\u00a0click &#8220;download&#8221; in the toolchain selector to install it automatically):<br \/>\n<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/03-toolchain.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3814\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/03-toolchain.png\" alt=\"03-toolchain\" width=\"856\" height=\"693\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/03-toolchain.png 856w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/03-toolchain-300x243.png 300w\" sizes=\"(max-width: 856px) 100vw, 856px\" \/><\/a><strong>Update:<\/strong> For better compatibility with the latest ESP32 tools, we recommend selecting the <a href=\"https:\/\/visualgdb.com\/documentation\/espidf\/consolidated\/\">consolidated toolchain<\/a> instead.<\/li>\n<li>On the next page select a sample project you want to use. In this example we will use the\u00a0hello_world project to demonstrate the basics of building and debugging:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/sample.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3832\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/sample.png\" alt=\"sample\" width=\"856\" height=\"693\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/sample.png 856w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/sample-300x243.png 300w\" sizes=\"(max-width: 856px) 100vw, 856px\" \/><\/a><\/li>\n<li>Finally select your debug method. If you haven&#8217;t done this before, follow <a href=\"https:\/\/visualgdb.com\/tutorials\/esp32\/\">this tutorial<\/a> to setup JTAG debugging for your board:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/04-hello.png\"><br \/>\n<\/a> <a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/05-openocd.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3816\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/05-openocd.png\" alt=\"05-openocd\" width=\"856\" height=\"693\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/05-openocd.png 856w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/05-openocd-300x243.png 300w\" sizes=\"(max-width: 856px) 100vw, 856px\" \/><\/a><\/li>\n<li>Press &#8220;Finish&#8221; to create the project. VisualGDB will\u00a0launch the ESP-IDF build system to query the precise project structure:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/06-loading.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3817\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/06-loading.png\" alt=\"06-loading\" width=\"1277\" height=\"754\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/06-loading.png 1277w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/06-loading-300x177.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/06-loading-1024x605.png 1024w\" sizes=\"(max-width: 1277px) 100vw, 1277px\" \/><\/a><\/li>\n<li>Once the project\u00a0structure is loaded, VisualGDB will display it in Solution Explorer and will open the main source file:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/07-loaded.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3818\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/07-loaded.png\" alt=\"07-loaded\" width=\"1277\" height=\"754\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/07-loaded.png 1277w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/07-loaded-300x177.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/07-loaded-1024x605.png 1024w\" sizes=\"(max-width: 1277px) 100vw, 1277px\" \/><\/a>If you are using a preview VisualGDB build, you\u00a0may get a spurious &#8220;found 1 additional include directory&#8221; message immediately after creating the project. It is shown because\u00a0the project is missing some include files that are generated\u00a0on first build. Simply build the project and re-open\u00a0your source file to eliminate the message.<\/li>\n<li>VisualGDB will\u00a0use the ESP-IDF build scripts to build the project, producing exactly the same result as if you were using command-line tools. It will automatically detect the number of CPU cores on your machine and run a multi-threaded build using the corresponding amount of threads:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/08-built.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3819\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/08-built.png\" alt=\"08-built\" width=\"1277\" height=\"754\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/08-built.png 1277w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/08-built-300x177.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/08-built-1024x605.png 1024w\" sizes=\"(max-width: 1277px) 100vw, 1277px\" \/><\/a><\/li>\n<li>If you are using the Custom edition or higher, Open VisualGDB Project Properties and\u00a0enable raw terminal on the\u00a0COM port corresponding to your ESP32 board. If not,\u00a0use any\u00a0other\u00a0terminal\u00a0program to connect to it:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/09-port.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3820\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/09-port.png\" alt=\"09-port\" width=\"1003\" height=\"616\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/09-port.png 1003w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/09-port-300x184.png 300w\" sizes=\"(max-width: 1003px) 100vw, 1003px\" \/><\/a><\/li>\n<li>Set a breakpoint in app_main() and start debugging. The breakpoint will hit and you will see the output printed by the board:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/10-debug.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3821\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/10-debug.png\" alt=\"10-debug\" width=\"1277\" height=\"754\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/10-debug.png 1277w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/10-debug-300x177.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/10-debug-1024x605.png 1024w\" sizes=\"(max-width: 1277px) 100vw, 1277px\" \/><\/a><\/li>\n<li>You can use the Threads window to\u00a0see the state of different threads of your program:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/11-threads.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3822\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/11-threads.png\" alt=\"11-threads\" width=\"1277\" height=\"754\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/11-threads.png 1277w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/11-threads-300x177.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/11-threads-1024x605.png 1024w\" sizes=\"(max-width: 1277px) 100vw, 1277px\" \/><\/a><\/li>\n<li>Now we will show how to add new source files to your ESP-IDF projects. Stop debugging, right-click on &#8220;Source Files&#8221; and select &#8220;Add-&gt;New Item&#8221;:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/12-newfile.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3823\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/12-newfile.png\" alt=\"12-newfile\" width=\"1277\" height=\"754\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/12-newfile.png 1277w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/12-newfile-300x177.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/12-newfile-1024x605.png 1024w\" sizes=\"(max-width: 1277px) 100vw, 1277px\" \/><\/a><\/li>\n<li>Then choose &#8220;C++ Source File&#8221; and\u00a0add &#8220;subdir&#8221; to the location field:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/13-subdir.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3824\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/13-subdir.png\" alt=\"13-subdir\" width=\"1277\" height=\"754\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/13-subdir.png 1277w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/13-subdir-300x177.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/13-subdir-1024x605.png 1024w\" sizes=\"(max-width: 1277px) 100vw, 1277px\" \/><\/a><\/li>\n<li>VisualGDB will automatically edit the COMPONENT_SRCDIRS variable in the corresponding component.mk file to\u00a0reference the new directory. This will also work\u00a0when adding existing files.<br \/>\n<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/14-components.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3825\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/14-components.png\" alt=\"14-components\" width=\"1277\" height=\"754\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/14-components.png 1277w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/14-components-300x177.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/14-components-1024x605.png 1024w\" sizes=\"(max-width: 1277px) 100vw, 1277px\" \/><\/a>Note that adding one file from a directory will automatically add all source files from the same directory due to the way\u00a0ESP-IDF handles source files. If this happens, VisualGDB will\u00a0let you double-check the implicitly added files before proceeding.<\/li>\n<li>Add a new function in the newly created source file: <a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/15-func.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3826\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/15-func.png\" alt=\"15-func\" width=\"1277\" height=\"754\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/15-func.png 1277w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/15-func-300x177.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/15-func-1024x605.png 1024w\" sizes=\"(max-width: 1277px) 100vw, 1277px\" \/><\/a><\/li>\n<li>Now create a header and\u00a0declaration for this function. Note that\u00a0if you want the\u00a0header to be used by both C and C++ files, you need to use conditionally compiled extern &#8220;C&#8221; wrapper:\n<pre class=\"\">#pragma once\r\n\r\n#ifdef __cplusplus\r\nextern \"C\"\r\n{\r\n#endif\r\n \r\n void func();\r\n \r\n#ifdef __cplusplus\r\n}\r\n#endif<\/pre>\n<p><a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/16-header.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3827\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/16-header.png\" alt=\"16-header\" width=\"1277\" height=\"754\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/16-header.png 1277w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/16-header-300x177.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/16-header-1024x605.png 1024w\" sizes=\"(max-width: 1277px) 100vw, 1277px\" \/><\/a><\/li>\n<li>Include &lt;header.h&gt; from your main file. VisualGDB will automatically suggest adding &#8220;subdir&#8221; to the include directory\u00a0list:<br \/>\n<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/17-subdir.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3828\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/17-subdir.png\" alt=\"17-subdir\" width=\"1277\" height=\"754\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/17-subdir.png 1277w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/17-subdir-300x177.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/17-subdir-1024x605.png 1024w\" sizes=\"(max-width: 1277px) 100vw, 1277px\" \/><\/a><\/li>\n<li>Click &#8220;Add now&#8221; and VisualGDB will automatically insert the correct relative path to\u00a0component.mk:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/srcdirs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3833\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/srcdirs.png\" alt=\"srcdirs\" width=\"1277\" height=\"754\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/srcdirs.png 1277w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/srcdirs-300x177.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/srcdirs-1024x605.png 1024w\" sizes=\"(max-width: 1277px) 100vw, 1277px\" \/><\/a><\/li>\n<li>If\u00a0the header\u00a0case doesn&#8217;t match the\u00a0case of the physical file name, VisualGDB will show a warning and let you automatically fix it so\u00a0you will be able to build the your sources on case-sensitive Linux systems:<br \/>\n<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/18-fixheader.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3829\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/18-fixheader.png\" alt=\"18-fixheader\" width=\"1277\" height=\"754\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/18-fixheader.png 1277w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/18-fixheader-300x177.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/18-fixheader-1024x605.png 1024w\" sizes=\"(max-width: 1277px) 100vw, 1277px\" \/><\/a><\/li>\n<li>You can also use the regular VS property pages to edit various project\/target properties. See how the &#8220;subdir&#8221; is now shown in the &#8220;additional include directories&#8221; field:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/19-subdir.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3830\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/19-subdir.png\" alt=\"19-subdir\" width=\"1277\" height=\"754\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/19-subdir.png 1277w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/19-subdir-300x177.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/19-subdir-1024x605.png 1024w\" sizes=\"(max-width: 1277px) 100vw, 1277px\" \/><\/a><\/li>\n<li>You can configure various properties of the ESP-IDF projects using the\u00a0first page of VisualGDB Project Properties. This is equivalent to the the &#8220;make menuconfig&#8221; command, but provides an easier searchable graphical interface:<br \/>\n<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/20-settings.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3831\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/20-settings.png\" alt=\"20-settings\" width=\"1277\" height=\"754\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/20-settings.png 1277w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/20-settings-300x177.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/20-settings-1024x605.png 1024w\" sizes=\"(max-width: 1277px) 100vw, 1277px\" \/><\/a><\/li>\n<li>For\u00a0each ESP-IDF-based project VisualGDB will automatically parse the ESP-IDF sources and make them available to the Find All References, Go To Definition and Code Map. You can\u00a0use\u00a0these\u00a0features to\u00a0explore the relations between different parts of ESP-IDF and\u00a0to diagnose tough problems:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/map.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3834\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/map.png\" alt=\"map\" width=\"1277\" height=\"754\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/map.png 1277w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/map-300x177.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/map-1024x605.png 1024w\" sizes=\"(max-width: 1277px) 100vw, 1277px\" \/><\/a><\/li>\n<li>Note that for debug configurations ESP-IDF will use the &#8220;-Og&#8221; optimization setting instead of &#8220;-O0&#8221;. This doesn&#8217;t affect most of debugging functionality, however can make some scenarios less convenient (e.g. may eliminate unused variables created just for checking values via watch). You can override this\u00a0via Project Properties for your project or specific components:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/21-optim1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3837\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/21-optim1.png\" alt=\"21-optim\" width=\"1277\" height=\"754\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/21-optim1.png 1277w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/21-optim1-300x177.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/21-optim1-1024x605.png 1024w\" sizes=\"(max-width: 1277px) 100vw, 1277px\" \/><\/a><\/li>\n<li>DO NOT use this setting for built-in ESP-IDF components, as it would result in random crashes. If your project suddenly stops working after using this setting, double-check all component.mk files for the code replacing -Og with -O0 and remove it if necessary (or simply\u00a0disable the setting via Project Properties so VisualGDB will remove those lines for you):<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/22-flags1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3838\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/22-flags1.png\" alt=\"22-flags\" width=\"1277\" height=\"754\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/22-flags1.png 1277w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/22-flags1-300x177.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2017\/05\/22-flags1-1024x605.png 1024w\" sizes=\"(max-width: 1277px) 100vw, 1277px\" \/><\/a><\/li>\n<\/ol>\n<p>If you want to check the project into a source control system, such as Git, simply check in the files in the project directory (including the <strong>.vgdbproj<\/strong> and <strong>.sln<\/strong> files) and add the following subdirectories to <strong>.gitignore<\/strong>:<\/p>\n<ul>\n<li>CodeDB (contains IntelliSense cache)<\/li>\n<li>VisualGDB (contains built objects and libraries)<\/li>\n<li>VisualGDBCache (contains parameters queried from the toolchain)<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This tutorial shows how to use the new advanced ESP-IDF project subsystem to create projects based on the ESP-IDF framework.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[142],"tags":[138,56,102],"_links":{"self":[{"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/posts\/2612"}],"collection":[{"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/comments?post=2612"}],"version-history":[{"count":19,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/posts\/2612\/revisions"}],"predecessor-version":[{"id":9046,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/posts\/2612\/revisions\/9046"}],"wp:attachment":[{"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/media?parent=2612"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/categories?post=2612"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/tags?post=2612"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}