2012-02-09 3 views
4

У меня есть двоичный файл C++ размером 190 МБ. Когда я помещаю этот двоичный файл в dbx и пытаюсь создать точку останова, dbx зависает. В то время как dbx висит, я заметил, что его память быстро выросла до более чем 10 ГБ. TotalView позволяет устанавливать точки останова; однако все отображаемые данные являются фиктивными. Я успешно отлаживал много других небольших двоичных файлов, поэтому моя догадка - это большой размер этого двоичного файла.Большой исполняемый файл вызывает отладчики для зависания

Двоичный: ELF 32-разрядный MSB исполняемый SPARC32PLUS Версия 1, V8 + Обязательный, динамически связанный, не разделенный.
Компилятор: CC: Sun C++ 5.9 SunOS_sparc 2007/05/03.
Dbx: 7.6 SunOS_sparc 2007/05/03.
TotalView: 8.2.0-0
Операционная система: Solaris 10

Как я использую DBX:

dbx mybinary 
stop at Something.cc:170 

Dbx никогда не возвращается из этой команды, и я должен в конечном итоге убить DBX из отдельной терминала ,

Я пробовал несколько вещей без успеха:
1. Переключился на связывание в большинстве библиотек динамически, что уменьшило двоичный размер до 19 МБ.
2. Пробовал на Solaris x86.
3. Составлено программное обеспечение как 64 бит.

Кто-нибудь знает, что может случиться, и как решить проблему?

+0

Какая версия компиляторов и какая версия dbx? dbx -V CC -V Просто для проверки: dbx зависает и начинает расти в ответ на то, что вы набрали команду «stop»? Значит, вам даже не нужно запускать программу в отладчике? –

+0

Я ответил на ваш вопрос, объяснив свой оригинальный пост. – Hitman

+0

Одна хорошая вещь, чтобы попробовать загрузить последнюю версию Solaris Studio и попробовать это. http://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/index.html Версия, которую вы используете, составляет 4,5 года. –

ответ

2

Попробуйте отладить с помощью другого отладчика, чтобы определить, вызывает ли ваш код проблему. Мой любимый отладчик на Solaris является MDB:

mdb ./yourapplicationname 
> your_c_fn_name::bp 
> ::run 

Не забывайте использовать подогнанные имена функций, если вы кодирование в C++. Конвейеру выход нм Grep, чтобы узнать, что ваш искаженное имя функции:

nm ./yourapplicationname | grep yourc++fnname 

Если MDB имеет один и тот же вопрос с DBX, то я хотел бы предложить вам взглянуть на ваш код. Если, однако, mdb попадает в bp без проблем, вы можете либо работать с mdb (который не может, насколько я знаю, работать с исходными файлами), либо вы можете настроить настройку своего приложения, чтобы сделать dbx счастливым.

+0

Спасибо @Mustafa. Пробовал mdb, и точка останова работала.Mdb - это шаг от использования отпечатков для отладки; однако моя команда и я найдем больше полезности в отладчике, который работал с исходными файлами. Таким образом, я был бы очень признателен за любую информацию о работе dbx или TotalView. – Hitman

+0

Вы попробовали dbxtool? –

+0

Я не думаю, что dbxtool доступен в Sun Studio 12. Кроме того, это слой GUI, который использует движок dbx под ним. поэтому вполне вероятно, что такая же ошибка произойдёт в dbxtool. –

Смежные вопросы