Как просмотреть исходный код в totalview? - PullRequest
3 голосов
/ 20 июля 2010

Я только что запустил totalview для своего приложения "hello world" (c ++), и у меня появляется только просмотр кода сборки.

Есть ли какие-либо настройки / флаги, которые мне нужно установить для просмотра исходного кода?Menubar-> View-> Source As-> Source у меня не работает.

приложение, которое я пытаюсь отладить, это просто приложение cout << "Hello World", просто чтобы запустить и запустить отладчик.</p>

Ответы [ 2 ]

6 голосов
/ 29 июля 2010

Давайте начнем с простых вещей.

Скомпилировали ли вы свое приложение с флагом отладки '-g'?Отладчик полагается на то, что компилятор предоставит ему таблицу символов и таблицу номеров строк для отображения того, что происходит в исполняемом файле, обратно в ваш исходный код.Без этого флага -g (или если вы впоследствии удалите свое приложение), эта информация не будет представлена, и отладка сборки - лучшее, на что вы можете надеяться.

Если вы выполнили компиляцию с помощью -g, находятся ли исходный код и исполняемый файл в одном каталоге или нет, если они не были перемещены с момента их компиляции?Компилятору известно только расположение исходного и исполняемого файлов во время их создания. Если вы переместите их, то иногда отладчик не сможет найти файл с исходным кодом.В этом случае вам может понадобиться помощь, определив путь поиска исходного кода.

Напишите здесь и дайте мне знать, если -g исправит вашу проблему.Если нет, то мы можем посмотреть в пути поиска и тому подобное.

Ура, Крис

2 голосов
/ 12 марта 2013

Я понимаю, что Jason94 почти наверняка решил свою проблему каким-то другим способом, но я подумал, что мог бы здесь ответить на этот вопрос, так как это хороший вопрос.

Для этого конкретного случая было бы интересно узнать, является ли программа многопоточной. TotalView разработан для работы с многопоточными программами и обладает характеристиками, которые могут удивлять пользователей. По умолчанию он не всегда фокусирует вас на потоке, который достигает точки останова. Таким образом, ваша программа могла фактически остановиться на вашей второй точке останова в другом потоке.

Представьте, что у вас есть 6 потоков (мы будем нумеровать их 0 - 5), и вы задали точку останова в процедуре. Тема 0 - это та, на которой вы сосредоточены, и вы нажимаете «go» Программа запускается, и поток 4 сначала достигает точки останова. По умолчанию точка останова останавливает весь процесс при достижении точки останова. В отладчике вы можете увидеть сборку, представляющую, где был поток 0, когда поток 4 достиг точки останова. Вы можете проверить корневое окно или панель потока, чтобы увидеть состояние других потоков, и вы можете увидеть, что один из них говорит «B2» (для точки останова 2). Затем вы можете нажать на этот поток, и TotalView перефокусирует вас на этот поток, и вы увидите, что он находится в точке останова.

Почему мы это делаем? Ну, потому что мы думаем, что это сбивает с толку / смущает, когда ваш фокус «оторван от вас» только потому, что другой поток достиг точки останова. Таким образом, по умолчанию мы оставляем пользователю контроль над фокусом потока.

Есть предпочтение, которое вы можете изменить, которое скажет totalview переориентировать окно процесса на «место события». Вы можете установить это, если предпочитаете, чтобы TotalView переориентировал ваше внимание на точку останова, но учтите, что при этом вы можете отскакивать от одного потока к другому.

Другая возможность состоит в том, что TotalView остановил процесс по какой-то причине, отличной от точки прерывания. Была ли программа segfault? Проверьте строку состояния в верхней части окна процесса, чтобы увидеть статус потока и процесса.

В любом случае - просто хотел опубликовать это для записи.

...