На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела FAQ в группе разделов С++.
1. Раздел FAQ предназначен для публикации готовых статей.
2. Здесь нельзя задавать вопросы, для этого существуют соответствующие разделы:
Чистый С++
Visual C++ / MFC / WTL / WinApi
Borland C++ Builder
COM / DCOM / ActiveX / ATL
Сопутствующие вопросы
3. Внимание, все темы и сообщения в разделе премодерируются. Любое сообщение или тема будут видны остальным участникам только после одобрения модератора.
Модераторы: B.V., Qraizer
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Студия может сама качать символы с сайта MS
    Оказывается, что Visual Studio 2005/2008 (на остальных не проверял) может сама качать символы (необоходимые для текущего дебага) с сайта MS.
    Для этого в переменной окружения _NT_SYMBOL_PATH должно стоять:

    ExpandedWrap disabled
      srv*c:\symbols*http://msdl.microsoft.com/download/symbols


    у меня стоит эта строка, скачивает символы в папку C:\symbols
    Сообщение отредактировано: Мальчиш -
      Подводные камни:
      1) Сначала надо бы скачать с мелкософта бесплатный пакет "Debugging tools for windows" (там порядка 5мб) и установить его. Может работать и без этого, но старые версии, поставляемые с виндами, довольно кривые.
      2) После этого вам может показаться, что студия перестала дебажить вообще.Вы нажимаете F5, и... студия зависает. Вы будете в панике переустанавливать студию, но это не поможет, а потом и винду вообще. На самом деле в этот момент она качает символы от библиотек, загружаемых в приложение. В первый раз может занять весьма немало времени, плюс смотри пункт 3. Всегда можно удалить переменную _NT_SYMBOL_PATH и все станет работать как раньше.
      3) Студия в силу своей внутренней непонятной мне корявости некоторые символы скачивает КАЖДЫЙ раз когда вы запускаете приложение на дебаг, а потом их почему-то сразу удаляет и сообщает "символы не найдены".

      Workaround: написать батничек
      Цитата
      "C:\Program Files\Debugging Tools for Windows\symchk.exe" /if %1 /s SRV*c:\Symbols*http://msdl.microsoft.com/download/symbols /od


      И бросать на него по одному файлы, для которых студия не смогла найти символы ("No symbols loaded"). Это загрузит символы "вручную", и в следующий раз студия сразу найдет их и не будет качать. Еще можно написать простенький парсер, который ест то что выдала студия (это можно руками скопипастить в файл) и для всех "плохих" строк вызывает батник.
        Кстати, формат строки
        Цитата
        srv*<папка для хранения символов>*<если надо, сервер откуда их качать>

        или
        Цитата
        symsrv*<длл, делающая всю работу>*<папка для хранения символов>*<если надо, сервер откуда их качать>


        Как папку можно указать любую пустую папку, которая вам удобна.
        Как ДЛЛ пока что можно указать только symsrv.dll, причем пути в этом пареметре не принимаются.
        Как сервер пока что можно указать только http://msdl.microsoft.com/download/symbols

        Примеры:
        Цитата
        srv*c:\symbols*http://msdl.microsoft.com/download/symbols
        symsrv*symsrv.dll*c:\symbols*http://msdl.microsoft.com/download/symbols
        symsrv*symsrv.dll*c:\symbols*


        Последний пример никогда ничего не качает, только берет символы если они уже есть в папке. Я использую именно такой вариант в силу подводных камней 2 и 3
          а что дают эти символы и для чего они??
            http://en.wikipedia.org/wiki/Debug_symbol
            :wall:
              в подавляющем числе случаев они не нужны. помогают только в особо запущенных случаях.

              Цитата
              Символы (symbols) — жаргонное название файлов с отладочной информацией (.pdb и .dbg). Microsoft предоставляет в открытом доступе символы к своим операционным системам и некоторым другим продуктам. Это так называемые public symbols, которые включают информацию об именах и местонахождении в коде глобальных объектов (функций и переменных), а также информацию о структуре стековых фреймов функций (FPO, frame pointer omission). Информации о локальных переменных, устройстве составных типов данных и привязок к исходному коду в public symbols нет.


              Цитата
              Во-первых, символы помогают отладчику более корректно раскручивать стек вызовов. Без символов стек часто обрывается вскоре после входа в системный код. С символами почти всегда можно видеть полный стек вплоть до функции WinMain и даже чуть дальше. Полный стек, например, может помочь понять, кто послал сообщение, в обработчике которого всё сломалось.
              Во-вторых, при наличии символов отладчик показывает настоящие имена функций и глобальных переменных в стеке и в результатах дизассемблирования. Эти имена зачастую осмыслены и помогают понять, где мы находимся и что происходит.
              В-третьих, некоторые полезные утилиты для своей работы требуют наличиия символов (например, umdh из Debugging Tools for Windows).
              Бывают и другие применения.
                Цитата
                Оказывается, что Visual Studio 2005/2008

                2003 вроде бы тоже такое умеет, хотя не точно сейчас не проверю
                  Отображают имена функций, глобальных переменных и т.п. в системных длл. Нередко при отладке существенно помогает понять что же происходит - особенно когда все падает глубоко внутри системной длл.
                    Цитата

                    в подавляющем числе случаев они не нужны. помогают только в особо запущенных случаях.


                    Ничего себе не нужны) Отладить что-либо windbg без нормальных символов ntoskrnl,hal и т.п. вообще помоему невозможно
                      При использовании этой фишки следует помнить, что сама студия будет качать символы исключительно для тех версий dll/exe, которые прямо сейчас стоят на компьютере.

                      И ежели вам пришлют dump от другой версии винды, с другими сервис-паками, или еще чего, то они вам не только не помогут, но и повредят, ибо дебагер будет ерунду показывать.

                      Решение - делать сервер символов.
                      Для этого используются утилиты из Debugging Tools For Windows (качается нахяляву с microsoft.com).
                      Подробности - у в книжке "Отладка приложений для Windows".
                        Где искать эту переменную _NT_SYMBOL_PATH? Команда set в консоли выдает некий список, но в нем _NT_SYMBOL_PATH отсутствует. Я не там смотрю? :wall:
                          Спасибо, полезная информация. Немного дополню._NT_SYMBOL_PATH сидит в реестре.
                          Вот оригинал параметра:
                          [HKEY_CURRENT_USER\Environment]
                          "_NT_SYMBOL_PATH"="srv*c:\\Symbols*http://msdl.microsoft.com/download/symbols"
                          А это измененный параметр, чтобы студия не лезла в инет:
                          [HKEY_CURRENT_USER\Environment]
                          "_NT_SYMBOL_PATH"="srv*symsrv.dll*c:\\Windows\\Symbols*"
                          После замены параметра нужно перезайти в сиситему, чтобы изменения всупили в силу. Допускаю, что параметр вообще можно удалить.
                          Сообщение отредактировано: conalex -
                            conalex

                            вообще-то переменные окружения меняются через Control Panel > System > Advanced tab > Environment Variables. И чтобы их изменения "подхватились" - достаточно перезапустить приложение.
                              Да, верно. Насчет простого перезапуска - не уверен.
                              Сообщение отредактировано: conalex -
                                Не уверен - не обгоняй :tong:
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0829 ]   [ 15 queries used ]   [ Generated: 26.04.24, 01:33 GMT ]