gdb 7.7 не влиза в OS-X Mavericks с gcc4.7.3 (Macports)

Ето една проста програма:

#include <iostream>
#include <vector>

namespace Example
{

  template <int dim>
  class Problem
  {
  public:

    void run() {
        std::cout<<"here.."<<std::endl;
    }   
  };
}

int main(int argc, char *argv[])
{
  Example::Problem<2> problem;
  problem.run();
  return 0;
}

компилиран с gcc 4.7.3 на Macport:

g++-mp-4.7 -g -O0 prog.cc -o prog

Ако се опитам да отстраня грешки в gdb 7.7 (самокомпилиран, не този на Macport!):

$gdb
file prog
b main
r
s

Не мога да вляза във функцията:

34    problem.run();
(gdb) s
here..
36    return 0;
(gdb)

Правя ли нещо нередно? Или изглежда като грешка на gdb, когато се използва на os-x mavericks?

АКТУАЛИЗАЦИЯ:

Не виждам никакви предупреждения/грешки при използване на gdb:

$ gdb ./prog
GNU gdb (GDB) 7.7
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin13.1.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./prog...Reading symbols from /Users/bla-bla-bla/prog.dSYM/Contents/Resources/DWARF/prog...done.
done.
(gdb)

също '-gdwarf-2 -gstrict-dwarf' не променят поведението....

UDAPTE2:

Виждам същото липсващо поведение на стека за извикване като тук. Въпреки че не успях да проверя дали компилирането с -m32 помага в моя случай, тъй като имам всичко за 64 бита и по този начин получавам проблеми с undefined symbols.

Друг проблем със стъпката по време на отстраняване на грешки се съобщава тук и тук на ТАК.


person Denis    schedule 22.03.2014    source източник
comment
Знаете ли, че имате недефинирано поведение в кода си? Създавате вектор, съдържащ пет елемента, но след това присвоявате на единадесетия елемент. Това означава, че всички залози са изключени.   -  person Some programmer dude    schedule 22.03.2014
comment
@JoachimPileborg със сигурност, това е просто глупав пример, въпросът не е кодът, а неспособността да се намесите.   -  person Denis    schedule 22.03.2014
comment
Въпросът е, че с недефинирано поведение не можете да кажете какво ще се случи. Както казах, всички залози са изключени. Да, вероятно няма да направи нищо в този конкретен случай, но докато имате недефинирано поведение, не можете да кажете нищо за поведението на програмата или как дебъгерът ще работи или не работи, когато се изпълнява.   -  person Some programmer dude    schedule 22.03.2014
comment
@JoachimPileborg, значи казвате, че е нормално да не мога да вляза във функцията и всъщност да отида ред по ред и да отстранявам грешки?..   -  person Denis    schedule 22.03.2014
comment
@JoachimPileborg p.s. актуализира въпроса, за да избегне тази дискусия....   -  person Denis    schedule 22.03.2014


Отговори (1)


Трябва да добавите опцията -gdwarf-2 заедно с -g за отстраняване на грешки с помощта на gdb за по-нова версия на gcc.

g++-mp-4.7 -g -gdwarf-2 -O0 prog.cc -o прог

person Mantosh Kumar    schedule 22.03.2014
comment
благодаря за вашето предложение, но това не промени поведението... :( - person Denis; 22.03.2014
comment
@Denis: Изглежда, че има някакъв проблем/бъг в gdb macport и можете да намерите повече информация на връзката: stackoverflow.com/ a/11705195/2724703 - person Mantosh Kumar; 22.03.2014
comment
благодаря за връзката, не получавам никакви GDB предупреждения/грешки, но може лесно да е свързано... - person Denis; 22.03.2014