Заменой mdb броска броска gdb?

Я не очень хорошо разбираюсь в GDB и MDB, но я знаю следующее:

      `(gdb) catch throw` 

Это будет прерываться каждый раз, когда выдается исключение
Есть ли у меня аналогичные команды в MDB, которые будут прерываться каждый раз, когда возникает исключение?

1 ответ

Решение

Нет, этого как такового не существует; Это связано с тем, что в Solaris зависит от вашего компилятора и / или параметров компиляции, какой C++ ABI используется (и как создаются исключения).

mdb не пытается узнать все это, и не является gdb в Solaris (если вы его скомпилируете, catch throw не будет работать с двоичными файлами Sun CC старого или нового стиля).

Ваш лучший вариант - выяснить, что такое "C++ ABI-хуки", то есть какие скрытые / внутренние функции вызываются throw()и точка останова тех. Или, как только вы нашли / перечислили эти хуки, напишите свой собственный модуль, который бы реализовывал ::catch команда (mdb расширяемо - модульный отладчик).

Изменить: (бесстыдный плагин) см. Также этот мой ответ (относительно исключений C++ и DTrace; "скрытые" имена функций там могут быть использованы для mdb точки останова также).

Другие вопросы по тегам