gdb, C++ exceptions (не переходит в catch блок)

IDE, VCS и прочее

Модератор: Модераторы разделов

kamre
Сообщения: 243
ОС: Win7/Ubuntu 11.10

gdb, C++ exceptions

Сообщение kamre »

Исходник:

Код: Выделить всё

#include <boost/lexical_cast.hpp>
#include <string>
#include <iostream>

int main() {
  std::string str("  1.0  ");
  double d;
  try {
    d = boost::lexical_cast<double>(str);
    std::cout << "converted\n";
  }
  catch (const boost::bad_lexical_cast &) {
    d = 0.0;
    std::cout << "not converted!\n";
  }
  return 0;
}


Компиляция:

Код: Выделить всё

g++ -g3 -O0 -I/home/ermak/boost_1_34_1 -c test_gdb.cpp -o test_gdb.o
g++ -g3 -O0 -I/home/ermak/boost_1_34_1 test_gdb.o -o test_gdb


Отладка:

Код: Выделить всё

(gdb) list main
1       #include <boost/lexical_cast.hpp>
2       #include <string>
3       #include <iostream>
4
5       int main() {
6         std::string str("  1.0  ");
7         double d;
8         try {
9           d = boost::lexical_cast<double>(str);
10          std::cout << "converted\n";
(gdb) break 9
Breakpoint 1 at 0x8048f12: file test_gdb.cpp, line 9.
(gdb) run
Starting program: /home/ermak/Projects/C++/test_gdb_exception_from_boost/test_gdb

Breakpoint 1, main () at test_gdb.cpp:9
9           d = boost::lexical_cast<double>(str);
(gdb) next
not converted!

Program exited normally.
(gdb) quit

Вопрос: почему после next отладчик не пошел в catch блок? Что я делаю не так?
При отладке в MSVC 2005 после исключения отладка продолжается в catch блоке. gdb не умеет что ли такое? В Eclipse и Emacs оболочках также не рабоает.
Спасибо сказали:
Аватара пользователя
JackYF
Сообщения: 129
ОС: Debian GNU/Linux

Re: gdb, C++ exceptions

Сообщение JackYF »

kamre, а если скомпилировать с опциями
-g -ggdb
?
"В природе не существует инструмента, машины или устройства, по силе и виртуозности сравнимого с человеческой рукой."
В. Г. Бэнхэм.
---
Ваяю "нелинейный" клавиатурный тренажёр для GNU/Linux - nlkt.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: gdb, C++ exceptions

Сообщение serzh-z »

Гм. Забавно, попробовал отладить *в Windows* нижеследующий код (c -g3), next сработал, как и ожидалось... Даже любопытно - чья это особенность...

Код: Выделить всё

#include <iostream>

int main(int argc) {
    int r = 0;

  try {
      if (argc > 1)
          throw 1;
  }
  catch (int) {
        r = 7;
        std::cout << "Err!" << std::endl;
  }

  std::cout << r << std::endl;

  return r;
}


Вероятно лучшим решением будет поиграться с командой "catch throw".
Спасибо сказали:
kamre
Сообщения: 243
ОС: Win7/Ubuntu 11.10

Re: gdb, C++ exceptions

Сообщение kamre »

JackYF писал(а):
18.02.2008 17:50
kamre, а если скомпилировать с опциями
-g -ggdb
?

Нет, это тоже не помогает..

Поигрался с командой catch. Когда в консоле gdb задаю команду
catch catch

Переходит почти правильно, правда сначала в какую-то системную so залазит.
А вот как бы это все из Eclipse засавить работать? Т.е. чтобы автоматически для gdb эта команда отсылалась...
Хотя с другой стороны не так критично, после первого промаха можно просто ставить breakpoint на начала блока catch..
Спасибо сказали: