News:

The new Release 25.03 is out! You can download binaries for Windows and many major Linux distros here .

Main Menu

FYI: GDB has a big bug to support MinGW GCC (4.7.x and later)

Started by ollydbg, October 05, 2013, 04:39:48 PM

Previous topic - Next topic

ollydbg

I just noticed that GDB has this bug: (the reasons are also shown in this bug report)
Bug 15559 – Method call and calling convention

This prevent you using a "inferior call" on the GDB, such as "p v[0]" or "p v.size()".

Test sample code below:

#include <string>
#include <vector>

int fff()
{
   return 3;
}

int main()
{
   std::vector<std::string> v;
   v.push_back("a");
   v.push_back("b");
   std::string abc = v[0];
   abc.c_str();
   abc.size();
   int i = v.size();
   i++;
   i = fff();
   return 0;      
}


If you set a breakpoint in the "return 0" line, then you try to see watch some values like "v[0]" or "v[1]", also you can enter "p abc.size()", "p abc.c_str()", "p v[0]", you will get wrong result or error in GDB.

GCC 4.6.x and earlier version don't cause such issue.
If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.

ollydbg

If some piece of memory should be reused, turn them to variables (or const variables).
If some piece of operations should be reused, turn them to functions.
If they happened together, then turn them to classes.