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;
}

скомпилировано с помощью Macport gcc 4.7.3:

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 в моем случае, так как у меня все для 64bit и соответственно получаю undefined symbols проблемы.

О другой пошаговой проблеме при отладке сообщается здесь и здесь на SO.


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 prog

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