Разглобяване с преплитане на източника от GDB и objdump

По време на една от моите (FWIW, ARM) сесии за отстраняване на грешки забелязах, че изходът за разглобяване с преплитане на източника от GDB и objdump -S се различава по интересен начин: objdump изглежда прескача през отделни/група инструкции и показва изходния ред, от който са генерирани тези инструкции ( ред на инструкции). Разглобяването на GDB, от друга страна, изглежда прескача през линиите на източника и изброява всички инструкции за асемблиране, генерирани от тази линия източник (ред на източника).

За код -O0 изходът от двете програми ще изглежда по същия начин. Но за оптимизиран код разглобяването на GDB е по-полезно, тъй като събира всички тези иначе разпръснати инструкции на едно място, така че е лесно да се види какво се генерира само от този изходен ред (очевидно в този случай адресите на инструкции не биха бъдете непрекъснати).

Мисля, че и двете форми са полезни сами по себе си. Въпросът ми е дали поведението на дисплея на двете програми може да се конфигурира. IOW, мога ли да кажа на GDB да показва като objdump или да кажа на objdump да показва като GDB? Също така, има ли други инструменти, които могат да изпълнят това постижение?

TIA.


person Jeenu    schedule 05.10.2015    source източник


Отговори (1)


Не вярвам, че има някакъв начин да се промени поведението на objdump, но наскоро беше добавена функция към gdb, която прави възможно показването на преплетения изходен код в реда на инструкциите. Тази функция е толкова нова, че все още не е в нито една версия, но можете да видите корекциите тук и тук.

С тези корекции старият флаг /m все още се разглобява в реда на програмния източник, докато нов флаг /s се разглобява в реда на инструкциите. Дългосрочният план е да се премахне /m, тъй като е счупен в някои крайни случаи и се смята, че не си струва да се коригира.

person Andrew    schedule 05.10.2015
comment
Благодаря за това. Означава ли това, че способността на GDB за разглобяване на източника ще изчезне напълно? Това би ме накарало да се тревожа. - person Jeenu; 06.10.2015
comment
Не, /m един ден (вероятно след много време) ще бъде премахнат, но /s ще остане. Все още получавате източник + инструкции, просто /s поръчки по адрес на инструкция. - person Andrew; 06.10.2015
comment
Това би било гадно. От това, което разбирам, /m е единственият начин да получите разглобяване, подредено по източник (оказва се много полезно, дори ако има някои крайни случаи). Надявам се, че е много, наистина много време от сега. - person Jeenu; 06.10.2015