Code refactoring for the variables support
authorJean-Paul Mari <djipi.mari@gmail.com>
Mon, 24 May 2021 07:33:59 +0000 (03:33 -0400)
committerJean-Paul Mari <djipi.mari@gmail.com>
Mon, 24 May 2021 07:33:59 +0000 (03:33 -0400)
docs/vj_HistoryNotes.txt
src/debugger/DBGManager.cpp
src/debugger/DBGManager.h

index ca4ccf8..d6152fa 100644 (file)
@@ -42,6 +42,7 @@ Release 5 (TBA)
 28) Fixed potential crash with the debugger tabs reset
 29) Added a search feature in the All Watch variables window
 30) Support the structure's members in the Local variables window
 28) Fixed potential crash with the debugger tabs reset
 29) Added a search feature in the All Watch variables window
 30) Support the structure's members in the Local variables window
+31) Code refactoring for the variables support in debugger mode
 
 Release 4a (15th August 2019)
 -----------------------------
 
 Release 4a (15th August 2019)
 -----------------------------
index a2f358d..edbc766 100644 (file)
@@ -16,6 +16,7 @@
 // JPM   Aug./2019  Added new functions mainly for source text lines\r
 // JPM  Sept./2019  Support the unsigned/signed short type\r
 //  RG   Jan./2021  Linux build fixes\r
 // JPM   Aug./2019  Added new functions mainly for source text lines\r
 // JPM  Sept./2019  Support the unsigned/signed short type\r
 //  RG   Jan./2021  Linux build fixes\r
+// JPM    May/2021  Code refactoring for the variables\r
 //\r
 \r
 // To Do\r
 //\r
 \r
 // To Do\r
@@ -229,6 +230,53 @@ char *DBGManager_GetFullSourceFilenameFromAdr(size_t Adr, DBGstatus *Status)
 }\r
 \r
 \r
 }\r
 \r
 \r
+// Get number of variables\r
+// A NULL address will return the numbre of global variables, otherwise it will return the number of local variables\r
+size_t DBGManager_GetNbVariables(size_t Adr)\r
+{\r
+       if ((DBGType & DBG_ELFDWARF))\r
+       {\r
+               return DWARFManager_GetNbVariables(Adr);\r
+       }\r
+       else\r
+       {\r
+               return  0;\r
+       }\r
+}\r
+\r
+\r
+// Get variable's information\r
+// A NULL address will return the pointer to the global variable structure, otherwise it will return the local's one\r
+S_VariablesStruct* DBGManager_GetInfosVariable(size_t Adr, size_t Index)\r
+{\r
+       if ((DBGType & DBG_ELFDWARF))\r
+       {\r
+               return (S_VariablesStruct*)DWARFManager_GetInfosVariable(Adr, Index);\r
+       }\r
+       else\r
+       {\r
+               return  NULL;\r
+       }\r
+}\r
+\r
+\r
+// Get global variable's Address based on his Name\r
+// Return found Address\r
+// Return NULL if no Address has been found\r
+size_t DBGManager_GetGlobalVariableAdrFromName(char *VariableName)\r
+{\r
+       if ((DBGType & DBG_ELFDWARF))\r
+       {\r
+               return DWARFManager_GetGlobalVariableAdrFromName(VariableName);\r
+       }\r
+       else\r
+       {\r
+               return 0;\r
+       }\r
+}\r
+\r
+\r
+#if 0\r
 // Get number of local variables\r
 // Return 0 if none has been found\r
 size_t DBGManager_GetNbLocalVariables(size_t Adr)\r
 // Get number of local variables\r
 // Return 0 if none has been found\r
 size_t DBGManager_GetNbLocalVariables(size_t Adr)\r
@@ -257,6 +305,7 @@ size_t DBGManager_GetNbGlobalVariables(void)
                return  0;\r
        }\r
 }\r
                return  0;\r
        }\r
 }\r
+#endif\r
 \r
 \r
 // Get address from symbol name\r
 \r
 \r
 // Get address from symbol name\r
@@ -276,22 +325,7 @@ size_t DBGManager_GetAdrFromSymbolName(char *SymbolName)
 }\r
 \r
 \r
 }\r
 \r
 \r
-// Get global variable's Address based on his Name\r
-// Return found Address\r
-// Return NULL if no Address has been found\r
-size_t DBGManager_GetGlobalVariableAdrFromName(char *VariableName)\r
-{\r
-       if ((DBGType & DBG_ELFDWARF))\r
-       {\r
-               return DWARFManager_GetGlobalVariableAdrFromName(VariableName);\r
-       }\r
-       else\r
-       {\r
-               return 0;\r
-       }\r
-}\r
-\r
-\r
+#if 0\r
 // Get local variable's type encoding based on his address and Index\r
 // Return the type encoding found\r
 // Return 0 if no type encoding has been found\r
 // Get local variable's type encoding based on his address and Index\r
 // Return the type encoding found\r
 // Return 0 if no type encoding has been found\r
@@ -450,6 +484,71 @@ char *DBGManager_GetGlobalVariableValue(size_t Index)
 }\r
 \r
 \r
 }\r
 \r
 \r
+// Get local variable's type name based on his Index\r
+// Return type name's text pointer found\r
+// Return NULL if no type name has been found\r
+char *DBGManager_GetLocalVariableTypeName(size_t Adr, size_t Index)\r
+{\r
+       if ((DBGType & DBG_ELFDWARF))\r
+       {\r
+               return DWARFManager_GetLocalVariableTypeName(Adr, Index);\r
+       }\r
+       else\r
+       {\r
+               return  NULL;\r
+       }\r
+}\r
+\r
+\r
+// Get local variable Op based on his Index\r
+// Return variable Op's found\r
+// Return 0 if no variable Op has been found\r
+size_t DBGManager_GetLocalVariableOp(size_t Adr, size_t Index)\r
+{\r
+       if ((DBGType & DBG_ELFDWARF))\r
+       {\r
+               return DWARFManager_GetLocalVariableOp(Adr, Index);\r
+       }\r
+       else\r
+       {\r
+               return  0;\r
+       }\r
+}\r
+\r
+\r
+// Get local variable name based on his Index\r
+// Return variable name's text pointer found\r
+// Return NULL if no variable name has been found\r
+char *DBGManager_GetLocalVariableName(size_t Adr, size_t Index)\r
+{\r
+       if ((DBGType & DBG_ELFDWARF))\r
+       {\r
+               return DWARFManager_GetLocalVariableName(Adr, Index);\r
+       }\r
+       else\r
+       {\r
+               return  NULL;\r
+       }\r
+}\r
+\r
+\r
+// Get global variable name based on his Index\r
+// Return variable name's text pointer found\r
+// Return NULL if no variable name has been found\r
+char *DBGManager_GetGlobalVariableName(size_t Index)\r
+{\r
+       if ((DBGType & DBG_ELFDWARF))\r
+       {\r
+               return DWARFManager_GetGlobalVariableName(Index);\r
+       }\r
+       else\r
+       {\r
+               return  NULL;\r
+       }\r
+}\r
+#endif\r
+\r
+\r
 // Get variable value based on his Adresse, Encoding Type and Size\r
 // Return value as a text pointer\r
 // Note: Pointer may point on a 0 length text\r
 // Get variable value based on his Adresse, Encoding Type and Size\r
 // Return value as a text pointer\r
 // Note: Pointer may point on a 0 length text\r
@@ -573,70 +672,6 @@ char *DBGManager_GetVariableValueFromAdr(size_t Adr, size_t TypeEncoding, size_t
 }\r
 \r
 \r
 }\r
 \r
 \r
-// Get local variable's type name based on his Index\r
-// Return type name's text pointer found\r
-// Return NULL if no type name has been found\r
-char *DBGManager_GetLocalVariableTypeName(size_t Adr, size_t Index)\r
-{\r
-       if ((DBGType & DBG_ELFDWARF))\r
-       {\r
-               return DWARFManager_GetLocalVariableTypeName(Adr, Index);\r
-       }\r
-       else\r
-       {\r
-               return  NULL;\r
-       }\r
-}\r
-\r
-\r
-// Get local variable Op based on his Index\r
-// Return variable Op's found\r
-// Return 0 if no variable Op has been found\r
-size_t DBGManager_GetLocalVariableOp(size_t Adr, size_t Index)\r
-{\r
-       if ((DBGType & DBG_ELFDWARF))\r
-       {\r
-               return DWARFManager_GetLocalVariableOp(Adr, Index);\r
-       }\r
-       else\r
-       {\r
-               return  0;\r
-       }\r
-}\r
-\r
-\r
-// Get local variable name based on his Index\r
-// Return variable name's text pointer found\r
-// Return NULL if no variable name has been found\r
-char *DBGManager_GetLocalVariableName(size_t Adr, size_t Index)\r
-{\r
-       if ((DBGType & DBG_ELFDWARF))\r
-       {\r
-               return DWARFManager_GetLocalVariableName(Adr, Index);\r
-       }\r
-       else\r
-       {\r
-               return  NULL;\r
-       }\r
-}\r
-\r
-\r
-// Get global variable name based on his Index\r
-// Return variable name's text pointer found\r
-// Return NULL if no variable name has been found\r
-char *DBGManager_GetGlobalVariableName(size_t Index)\r
-{\r
-       if ((DBGType & DBG_ELFDWARF))\r
-       {\r
-               return DWARFManager_GetGlobalVariableName(Index);\r
-       }\r
-       else\r
-       {\r
-               return  NULL;\r
-       }\r
-}\r
-\r
-\r
 // Get function name from address\r
 // Return function name found\r
 // Return NULL if no function name has been found\r
 // Get function name from address\r
 // Return function name found\r
 // Return NULL if no function name has been found\r
index 5695eb0..8cd45b0 100644 (file)
@@ -240,6 +240,26 @@ typedef enum {
 DBGOP;\r
 \r
 \r
 DBGOP;\r
 \r
 \r
+// Variables internal structure\r
+typedef struct VariablesStruct\r
+{\r
+       size_t Op;                                                                              // Variable's DW_OP\r
+       union\r
+       {\r
+               size_t Addr;                                                            // Variable memory address\r
+               int Offset;                                                                     // Variable stack offset (signed)\r
+       };\r
+       char *PtrName;                                                                  // Variable's name\r
+       size_t TypeOffset;                                                              // Offset pointing on the Variable's Type\r
+       size_t TypeByteSize;                                                    // Variable's Type byte size\r
+       size_t TypeTag;                                                                 // Variable's Type Tag\r
+       size_t TypeEncoding;                                                    // Variable's Type encoding\r
+       char *PtrTypeName;                                                              // Variable's Type name\r
+       size_t NbTabVariables;                                                  // Number of Variable's members\r
+       VariablesStruct **TabVariables;                                 // Variable's Members (used for structures at the moment)\r
+}S_VariablesStruct;\r
+\r
+\r
 // Internal manager\r
 extern void    DBGManager_Init(void);\r
 extern void    DBGManager_SetType(size_t DBGTypeSet);\r
 // Internal manager\r
 extern void    DBGManager_Init(void);\r
 extern void    DBGManager_SetType(size_t DBGTypeSet);\r
@@ -259,7 +279,6 @@ extern size_t DBGManager_GetSrcNbListPtrFromIndex(size_t Index, bool Used);
 extern size_t *DBGManager_GetSrcNumLinesPtrFromIndex(size_t Index, bool Used);\r
 \r
 // General manager\r
 extern size_t *DBGManager_GetSrcNumLinesPtrFromIndex(size_t Index, bool Used);\r
 \r
 // General manager\r
-extern char *DBGManager_GetVariableValueFromAdr(size_t Adr, size_t TypeEncoding, size_t TypeByteSize);\r
 extern size_t DBGManager_GetSrcLanguageFromIndex(size_t Index);\r
 \r
 // Functions manager\r
 extern size_t DBGManager_GetSrcLanguageFromIndex(size_t Index);\r
 \r
 // Functions manager\r
@@ -274,6 +293,15 @@ extern char        *DBGManager_GetFullSourceFilenameFromAdr(size_t Adr, DBGstatus *Stat
 extern char *DBGManager_GetNumFullSourceFilename(size_t Index);\r
 extern char *DBGManager_GetNumSourceFilename(size_t Index);\r
 \r
 extern char *DBGManager_GetNumFullSourceFilename(size_t Index);\r
 extern char *DBGManager_GetNumSourceFilename(size_t Index);\r
 \r
+// Variables manager\r
+extern size_t DBGManager_GetNbVariables(size_t Adr);\r
+extern S_VariablesStruct* DBGManager_GetInfosVariable(size_t Adr, size_t Index);\r
+extern char *DBGManager_GetVariableValueFromAdr(size_t Adr, size_t TypeEncoding, size_t TypeByteSize);\r
+\r
+// Global variables manager\r
+extern size_t DBGManager_GetGlobalVariableAdrFromName(char *VariableName);\r
+\r
+#if 0\r
 // Global variables manager\r
 extern size_t DBGManager_GetNbGlobalVariables(void);\r
 extern char *DBGManager_GetGlobalVariableName(size_t Index);\r
 // Global variables manager\r
 extern size_t DBGManager_GetNbGlobalVariables(void);\r
 extern char *DBGManager_GetGlobalVariableName(size_t Index);\r
@@ -281,7 +309,6 @@ extern size_t DBGManager_GetGlobalVariableTypeEncoding(size_t Index);
 extern char *DBGManager_GetGlobalVariableTypeName(size_t Index);\r
 extern size_t DBGManager_GetGlobalVariableTypeByteSize(size_t Index);\r
 extern size_t DBGManager_GetGlobalVariableAdr(size_t Index);\r
 extern char *DBGManager_GetGlobalVariableTypeName(size_t Index);\r
 extern size_t DBGManager_GetGlobalVariableTypeByteSize(size_t Index);\r
 extern size_t DBGManager_GetGlobalVariableAdr(size_t Index);\r
-extern size_t DBGManager_GetGlobalVariableAdrFromName(char *VariableName);\r
 extern char *DBGManager_GetGlobalVariableValue(size_t Index);\r
 extern size_t DBGManager_GetGlobalVariableTypeTag(size_t Index);\r
 \r
 extern char *DBGManager_GetGlobalVariableValue(size_t Index);\r
 extern size_t DBGManager_GetGlobalVariableTypeTag(size_t Index);\r
 \r
@@ -294,6 +321,7 @@ extern size_t DBGManager_GetLocalVariableTypeByteSize(size_t Adr, size_t Index);
 extern size_t DBGManager_GetLocalVariableTypeTag(size_t Adr, size_t Index);\r
 extern size_t DBGManager_GetLocalVariableOp(size_t Adr, size_t Index);\r
 extern int DBGManager_GetLocalVariableOffset(size_t Adr, size_t Index);\r
 extern size_t DBGManager_GetLocalVariableTypeTag(size_t Adr, size_t Index);\r
 extern size_t DBGManager_GetLocalVariableOp(size_t Adr, size_t Index);\r
 extern int DBGManager_GetLocalVariableOffset(size_t Adr, size_t Index);\r
+#endif\r
 \r
 \r
 #endif // __DBGMANAGER_H__\r
 \r
 \r
 #endif // __DBGMANAGER_H__\r