User forums > Using Code::Blocks
Showing vector elements in debugger
oBFusCATed:
--- Quote from: nji on June 22, 2017, 08:40:33 pm ---And "test[1]" is not a too complex expression ...
--- End quote ---
Why do you think this is not a complex expression?
Are you sure you're python scripts match the version of you c++ standard library you're using?
nji:
No, I'm not sure at all if anything matches together. I just downloaded the "updates" as pointed to in http://forums.codeblocks.org/index.php/topic,21998.msg149716.html#msg149716.
Sigh ... do you need any more explanation why M$'s comm. ed. is so popular?
Do you want my opinion about a development chain where nothing fits together, and debugging vector[1] is impossible?
...
OK, if the python scripts have to match the c++ standard library ... I moved the original scripts (from mingw 4.9.2) back.
Effect: same effect.
Does gdb has to match too?
This becomes ridiculous and frustrating.
oBFusCATed:
--- Quote from: nji on June 22, 2017, 11:34:08 pm ---M$'s comm. ed.
--- End quote ---
Are you talking about visual studio?
--- Quote from: nji on June 22, 2017, 11:34:08 pm ---Do you want my opinion about a development chain where nothing fits together, and debugging vector[1] is impossible?
--- End quote ---
This won't change anything. Patches improve the situation. Ranting is just ranting.
--- Quote from: nji on June 22, 2017, 11:34:08 pm ---OK, if the python scripts have to match the c++ standard library ... I moved the original scripts (from mingw 4.9.2) back.
Effect: same effect.
--- End quote ---
Yes, they need to match, because the standard library changes its internals and the python script need to know the internals of the library.
--- Quote from: nji on June 22, 2017, 11:34:08 pm ---Does gdb has to match too?
--- End quote ---
Only to the point that the Python APIs used in the scripts are compatible. But I think the gdb's python apis are relatively stable.
@bluehazzard: Does this example work for you?
BlueHazzard:
ok, here is my full working setup:
gcc: TDM-gcc 4.9.2
gdb: http://sourceforge.net/projects/gdbmingw/files/gdb2016-01-30.zip/download
from ollydbg in http://forums.codeblocks.org/index.php/topic,11301.0.html
--- Quote ---You must install Python 2.7.5 release 32bit version on your system, as my build was linked to this python release.
--- End quote ---
you need to install python 2.7.5: https://www.python.org/download/releases/2.7.5/
stl script in TDM-GCC-32\share\gcc-4.9.2\python\libstdcxx\v6 printers.py and xmethods.py are attached. I don't remember where i got them from (probably the svn tree)
i use a gdb file in TDM-GCC-32\bin\stl.gdb :
--- Code: ---python
import sys
sys.path.insert(0, 'TDM-GCC-32\share\gcc-4.9.2\python')
from libstdcxx.v6.printers import register_libstdcxx_printers
#register_libstdcxx_printers (None)
end
--- End code ---
and in the debugger settings:
Settings->Debugger->GDB->Default->initialization commands:
--- Code: ---source TDM-GCC-32\bin\stl.gdb
--- End code ---
if i debug this code:
--- Code: ---#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<double> test;
test.push_back( 22.44 );
test.push_back( 1.3795933261199322e-306 );
cout << "Hello world!" << endl;
return 0;
}
--- End code ---
i get this debugger log, and all works fine:
--- Code: ---Active debugger config: GDB/CDB debugger:Default
Building to ensure sources are up-to-date
Selecting target:
Debug
Adding source dir: ****\
Adding source dir: ****\
Adding file: ****\bin\Debug\rerreer.exe
Changing directory to: ****.
Set variable: PATH=#######
[debug]Command-line: TDM-GCC-32\bin\gdb.exe -fullname -quiet -nx -args ****bin/Debug/rerreer.exe
[debug]Working dir : ****
Starting debugger: TDM-GCC-32\bin\gdb.exe -fullname -quiet -nx -args ****bin/Debug/rerreer.exe
done
[debug]> set prompt >>>>>>cb_gdb:
[debug]Skip initializing the scripting!
Setting breakpoints
[debug]Reading symbols from ****bin/Debug/rerreer.exe...done.
[debug](gdb) >>>>>>cb_gdb:
[debug]> show version
[debug]GNU gdb (GDB) 7.10.50.20160130-git
[debug]Copyright (C) 2016 Free Software Foundation, Inc.
[debug]License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
[debug]This is free software: you are free to change and redistribute it.
[debug]There is NO WARRANTY, to the extent permitted by law. Type "show copying"
[debug]and "show warranty" for details.
[debug]This GDB was configured as "mingw32".
[debug]Type "show configuration" for configuration details.
[debug]For bug reporting instructions, please see:
[debug]<http://www.gnu.org/software/gdb/bugs/>.
[debug]Find the GDB manual and other documentation resources online at:
[debug]<http://www.gnu.org/software/gdb/documentation/>.
[debug]For help, type "help".
[debug]Type "apropos word" to search for commands related to "word".
[debug]>>>>>>cb_gdb:
[debug]> set confirm off
Debugger name and version: GNU gdb (GDB) 7.10.50.20160130-git
[debug]>>>>>>cb_gdb:
[debug]> set width 0
[debug]>>>>>>cb_gdb:
[debug]> set height 0
[debug]>>>>>>cb_gdb:
[debug]> set breakpoint pending on
[debug]>>>>>>cb_gdb:
[debug]> set print asm-demangle on
[debug]>>>>>>cb_gdb:
[debug]> set unwindonsignal on
[debug]>>>>>>cb_gdb:
[debug]> set print elements 200
[debug]>>>>>>cb_gdb:
[debug]> set new-console on
[debug]>>>>>>cb_gdb:
[debug]> set disassembly-flavor att
[debug]>>>>>>cb_gdb:
[debug]> catch throw
[debug]Catchpoint 1 (throw)
[debug]>>>>>>cb_gdb:
[debug]> source TDM-GCC-32\bin\stl.gdb
[debug]> directory ****
[debug]>>>>>>cb_gdb:
[debug]> break "****main.cpp:12"
[debug]Source directories searched: ****/rerreer;$cdir;$cwd
[debug]>>>>>>cb_gdb:Breakpoint 2 at 0x4013ce: file ****\main.cpp, line 12.
Source directories searched: ****/rerreer;$cdir;$cwd
[debug]> run
[debug]>>>>>>cb_gdb:Starting program: ****\bin\Debug\rerreer.exe
[debug]> info frame
Child process PID: 7276
[debug][New Thread 7276.0x16ec]
[debug]Breakpoint 2, main () at ****\main.cpp:12
[debug]****\main.cpp:12:187:beg:0x4013ce
[debug]>>>>>>cb_gdb:Stack level 0, frame at 0x28ff30:
At ****\main.cpp:12
[debug]> whatis test
[debug] eip = 0x4013ce in main (****\main.cpp:12); saved eip = 0x4010fd
[debug] source language c++.
[debug] Arglist at 0x28ff18, args:
[debug] Locals at 0x28ff18, Previous frame's sp is 0x28ff30
[debug] Saved registers:
[debug] ebx at 0x28ff0c, ebp at 0x28ff18, esi at 0x28ff10, edi at 0x28ff14, eip at 0x28ff2c
[debug]>>>>>>cb_gdb:type = std::vector<double>
[debug]> output test
[debug]>>>>>>cb_gdb:
[debug]> whatis test[2]
[debug]std::vector of length 2, capacity 2 = {22.440000000000001, 1.3795933261199322e-306}>>>>>>cb_gdb:type = double
[debug]> output test[2]
[debug]>>>>>>cb_gdb:
[debug]> whatis test[0]
[debug]-2.5301706769843864e-098>>>>>>cb_gdb:type = double
[debug]> output test[0]
[debug]>>>>>>cb_gdb:
[debug]> whatis test[1]
[debug]22.440000000000001>>>>>>cb_gdb:type = double
[debug]> output test[1]
[debug]>>>>>>cb_gdb:
[debug]> bt 30
[debug]1.3795933261199322e-306>>>>>>cb_gdb:#0 main () at ****\main.cpp:12
[debug]>>>>>>cb_gdb:
--- End code ---
i know this is all frustrating, and as soon as we will find out what goes wrong i will try to create a wiki entry with the exact steps...
[Edit:] NOTE: i have altered all paths, so you have to use absolute paths for all path entries. I also don't use any white spaces or non ASCII characters in my paths
[Edit:] add python download link
ollydbg:
@BlueHazzard, good job and good tutorial. :)
Navigation
[0] Message Index
[#] Next page
[*] Previous page
Go to full version