Как да генерирам символна информация, която да използвам с Linux версията на Intel VTune Amplifier?

Използвам Intel VTune Amplifier XE 2011, за да анализирам производителността на моята програма. Искам да мога да видя изходния код в резултатите от анализа и в документацията се казва, че трябва да предоставя информация за символа. За съжаление не се посочва как да се генерира тази символна информация, когато компилирам моята програма. Във версията на VTune за Windows всичко, което трябваше да направя, беше да осигуря файла ".pdb", който Microsoft Visual Studio ще генерира. Има ли подобен вид файл, който мога да създам с помощта на g++, за да предоставя информация за този символ?


person Dylan Klomparens    schedule 14.01.2011    source източник


Отговори (3)


gcc -g <your stuff> трябва да е всичко, което е необходимо. Използвах обаче по-стара версия.

Опциите на командния ред за по-новите неща са тук

РЕДАКТИРАНЕ: Този SO отговор вероятно е по-ценен от всичко тук.

person JimR    schedule 14.01.2011
comment
Да, но това ще забави ли изпълнението на програмата? - person Dylan Klomparens; 15.01.2011
comment
Не - просто прави изпълнимия файл малко по-голям. - person Paul R; 15.01.2011
comment
Профилирането почти винаги го прави. Колкото повече информация позволите на профилиращия да събере, толкова по-бавно ще бъде. -g не би трябвало да има голям ефект. - person JimR; 15.01.2011
comment
@JimR: Предположих, че пита дали компилирането с -g кара програмата да работи по-бавно, което, разбира се, не е така. - person Paul R; 15.01.2011
comment
Отлично, ще компилирам с опцията -g. - person Dylan Klomparens; 15.01.2011
comment
@Paul R: Съгласен. Направих вероятно грешно предположение, когато отговорих. Хората често се изненадват колко бавно работи профайлърът. - person JimR; 15.01.2011
comment
@JimR: това е главно проблем с инструментирани профили, като gprof et al. Профилите за вземане на проби като Zoom, Shark и т.н. обикновено имат само малко влияние върху производителността, освен ако не зададете интервала на вземане на проби на много ниска стойност (напр. ‹ 1 ms). - person Paul R; 15.01.2011
comment
@JimR: Има два неща, които трябва да се разберат относно профайлърите за вземане на проби от стека на стена. 1) Не е необходимо честотата на извадката да е висока, тъй като по-голямата част от информацията, която получавате за това къде са проблемите в 10^4 проби, също се съдържа във всеки 10^2 (или по-малко) от тези проби. 2) Въпреки че вземането на проба е бързо, то не променя много резултатите, ако не е бързо, защото отчита проценти. Взимам проби ръчно и това не влияе на процентите. - person Mike Dunlavey; 15.01.2011

Опитахте ли да компилирате с -g? Обикновено това е всичко, от което се нуждаете, за да генерирате символни данни за дебъгери, програмисти за профилиране и т.н.

Между другото, за профилиране на Linux, Zoom от RotateRight.com е много по-удобен за потребителя от VTune.

person Paul R    schedule 14.01.2011
comment
++ за мащабиране. (слагам линк.) - person Mike Dunlavey; 15.01.2011

Най-„класическият“ начин да получите изпълним файл, който да съдържа информацията за отстраняване на грешки с GCC, е да посочите опцията на командния ред „-g“, както е споменато от другите автори. Това не води до удар в производителността, тъй като информацията за отстраняване на грешки се намира в ELF секции, които не са част от кода или сегмента с данни. Това означава, че .debug* секциите не се нанасят в паметта по време на нормалното изпълнение на програмата, това е само времето за отстраняване на грешки, когато програмата за отстраняване на грешки ги въведе.

Друго полезно съображение за всеки разработчик, който работи върху производствен софтуер, е да използва отделни файлове с информация за отстраняване на грешки. Това предполага компилиране на програмата с "-g", както е описано по-горе и след това използване на помощната програма objcopy за копиране на ELF секциите, съдържащи информация за отстраняване на грешки, в отделен файл и добавяне на връзка от оригиналния двоичен файл към отделния файл с информация за отстраняване на грешки. Това е изключително полезно за възможността да съхранявате информацията за отстраняване на грешки за битовете, които сте предоставили на клиент, така че да е възможно отстраняване на грешки след смъртта. И разбира се, за профилиране на производителността на освобождаващите битове също.

person Alexey Alexandrov    schedule 17.04.2012