Подскажите пожалуйста как проанализировать core дамп, если приложение многопоточноея делаю
#gdb prog
...
(gdb) core core
...после этого в месте, где должны быть имена функций и строки кода стоят вопросительные знаки
свое приложение (генерирующее core) компилирую примерно так
#g++ -g -o $(NAMWE) $(INC) $(LIBDIR) $(LIB) $(NAMWE).cpp
Там еще Qt окошки подключиются (если это принципиально) ...
>Подскажите пожалуйста как проанализировать core дамп, если приложение многопоточное
>
>я делаю
>
>#gdb prog
>...
>(gdb) core core
>...
>
>после этого в месте, где должны быть имена функций и строки
>кода стоят вопросительные знакипопробовать не gdb, а dbx из Sun Studio
у него с многопоточностью проблем нет.чем анализировать кору, имеет смысл
просто запустить приложение под dbx
и когда оно рухнет все может стать гораздо яснее.>свое приложение (генерирующее core) компилирую примерно так
>#g++ -g -o $(NAMWE) $(INC) $(LIBDIR) $(LIB) $(NAMWE).cpp
>Там еще Qt окошки подключиются (если это принципиально) ...Если падение внутри QT -- то можно пересобрать QT с -g
и проверить с использованием дебажного варианта библиотеки.Можешь запостить стек трейс?
Спасибо за ответ.В каком месте валится программа я выяснил (в этот раз).
Моя проблема в том, что я не смогу легко выяснить в каком месте cвалится программа в других случаях...
Например, в современных Линуксах я не могу найти где располагается core файл (когда падает программа) (где его искать ?) (раньше он был в каталоге из которого запускаешь программу)Я перехватываю 11 сигнал, а затем делаю siglongjmp, чтобы не сваливалась программа. Можно ли как-нибудь узнать какая инструкция выполнялась перед вызовом 11 сигнала ?
В винде есть отладочные библиотеки и есть релизные. В линуксе существует такое деление ? И нужно ли как-то специально подключать отладочные библиотеки ?
> Можешь запостить стек трейс?
Что такое стек трейс. Если это то, что вызвается в gdb путем bt, то там у меня одни вопросительные знаки (сейчас у меня проблемного кода нет, просто нужно научиться отлаживать многопоточные программы штатными средствами (которые всегда есть под рукой в Линуксе (во всех версиях))).
>Например, в современных Линуксах я не могу найти где располагается core файл
>(когда падает программа) (где его искать ?) (раньше он был в
>каталоге из которого запускаешь программу)locate core
или он может не создаваться воовсе.
проверь "ulimit -c"
>>Я перехватываю 11 сигнал, а затем делаю siglongjmp, чтобы не сваливалась программа.
>Можно ли как-нибудь узнать какая инструкция выполнялась перед вызовом 11 сигнала
>?man sigaction
>В винде есть отладочные библиотеки и есть релизные.
>В линуксе существует такое деление ?собрана либа с -g -- отладочная
собрана без -- релизная.
Есть сорцы -- пересобрал без оптимизации и с -g --
-- вот тебе и отладочная QT>И нужно ли как-то специально подключать отладочные библиотеки ?
man ld #в частности LD_LIBRARY_PATH
>
>
>> Можешь запостить стек трейс?
>
>Что такое стек трейс. Если это то, что вызвается в gdb путем
>bt, то там у меня одни вопросительные знакисобери свою программу с -g, без оптимизации и возможно будет лучше.
вопросительные знаки могут быть по разным причинам.
например на x86_64 с "omit-frame-pointer"> (сейчас у меня
>проблемного кода нет, просто нужно научиться отлаживать многопоточные программы штатными средствами
>(которые всегда есть под рукой в Линуксе (во всех версиях))).линукс это не две системы, и даже не десять.
все линуксы друг от друга немножко отличаются.
поэтому надеяться на штатные средства "во всех версиях"
на приходится. бывает линукс, например, без gdb.если хочется стабильности и штатных средств goto solaris.
>если хочется стабильности и штатных средств goto solaris.А чем FreeBSD не стабильна?