Search This Blog

Showing posts with label VSCode. Show all posts
Showing posts with label VSCode. Show all posts

Monday, March 27, 2023

Debugging C++ , with VSCode & GDB command ( improve loading performance tip for heavy projects)

 Its all about symbols that loaded into memory in the debug process.

 With VScode could takes time just to get into your breakpoint, on huge c++ project , with many so files and dependencies. 
sometimes moving with F10 takes time , and looks like vscode screen is freezing.
to fix this issue and get much better vscode debug performance follow the next steps:
add to launch.json file as follow the next section, make sure in the exceptionList you have your brand so file .
the section below prevent loading extra symbols that you don't need to debug.
you can add many so file is the exceptionList separated by semicolon "tttt.so;yyy.so"

"symbolLoadInfo": {
                "loadAll": false,
                "exceptionList": "libMyShared.so"
            },  

The next tip with VScode - make sure to close the Local list in the VARIABLES group

GDB 

to work with gdb command line make sure all the symbolic will not loaded , the default is ON.

the next parameter control such behavior

in gdb type 'set auto-solib-add off' - disabled loading any symbolic files.


you can start your program 

and when your SO files loaded , you can CTRL-C 

and use the share command to load your so symbolic file.

share /path/mysofile.so 


option 2 : put in your program the next line 

__asm__ volatile("int $0x03");


its will break into your gdb and use share command to load your symbolic .




enjoy 

Yaniv Tzanany

Monday, March 20, 2023

C++ custom debugger view for VisualCode

you can add custom view  for debugger.

https://www.cppstories.com/2021/natvis-tutorial/

https://devblogs.microsoft.com/cppblog/debug-visualizers-in-visual-c-2015/

create into your root folder  xxx.natvis

make sure in the launch.json  to add

            "visualizerFile": "${workspaceFolder}/xxx.natvis",
            "showDisplayString": true,

more sample:

 https://learn.microsoft.com/en-us/visualstudio/debugger/create-custom-views-of-native-objects?view=vs-2019

note:

the Name of the class must be full qualified e.g. contain namespace name if exist.

even typedef name should be act as new Name in the natvis file.

ty  

enjoy

Yaniv 

sample template class:

template<typename T> class MyObject
{
public:
    MyObject() : myVal( 5 ) {}
    T myVal;
};


sample template  natvis file:

<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">

<Type Name="MyObject&lt;*&gt;">
  <DisplayString>{{myVal = {myVal}}}</DisplayString>
  <Expand>
    <Item Name="[myVal]">myVal</Item>
  </Expand>
</Type> 
</AutoVisualizer>