Search This Blog

Thursday, March 30, 2023

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>

Sunday, March 12, 2023

C++ struct alignment - can save you memory

 the orders of members in a struct affect sizeof of struct 


see this example https://www.joshcaratelli.com/blog/struct-packing


if no compiler directive - memory align to 8 bytes by default

struct top

{

    char* p; //8 bytes

    int i;  //4 bytes

    short s; // 2 bytes

    char c;  // 1 byte

                    // 1 padding 

    int t; // 4 bytes

                    // 4 padding 

};

struct buttom

{

    char c; // 1 bytes -- 7 padding

    char* p; //8 bytes

    short s;  //2 bytes

    int i;   //4 bytes

               // 2 padding

    int t;  // 4 bytes 

               // 4 padding

        

};

    int sizeTop = sizeof(top);   // =>24

    int sizeButtom = sizeof(buttom); // =>32