Что PDB получает меня при отладке и как я знаю, что он работает?

Если существует проблема с методом onActivityResult, который находится внутри класса фрагмента, и вы хотите обновить то, что находится внутри класса фрагмента, используйте:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    if(resultCode == Activity.RESULT_OK)
    {
        // If the user had agreed to enabling Bluetooth,
        // populate the ListView with all the paired devices.
        this.arrayDevice = new ArrayAdapter<String>(this.getContext(), R.layout.device_item);
        for(BluetoothDevice bd : this.btService.btAdapater.getBondedDevices())
        {
            this.arrayDevice.add(bd.getAddress());
            this.btDeviceList.setAdapter(this.arrayDevice);
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}

Просто добавьте this.variable, как показано в приведенном выше коде. В противном случае метод будет вызван внутри родительского действия, и переменная не будет обновляться в текущем экземпляре.

Я также протестировал его, поместив этот блок кода в MainActivity, заменив this на HomeFragment и переменные статические. Я получил результаты, как я ожидал.

Итак, если вы хотите, чтобы класс фрагмента имел свою собственную реализацию onActivityResult, приведенный выше пример кода является ответом.

7
задан SamB 15 April 2010 в 18:14
поделиться

4 ответа

Подтвердить, используете ли Вы обеспеченный PDB, CorporateComponent.pdb, во время отладки в рамках Visual Studio обзор IDE окно вывода и определяете местоположение строки, указывающей, что CorporateComponent.dll загружается и сопровождается строкой Symbols loaded.

Проиллюстрировать из моего проекта:

The thread 0x6a0 has exited with code 0 (0x0).
The thread 0x1f78 has exited with code 0 (0x0).
'AvayaConfigurationService.vshost.exe' (Managed): Loaded 'C:\Development\Src\trunk\ntity\AvayaConfigurationService\AvayaConfigurationService\bin\Debug  \AvayaConfigurationService.exe', Symbols loaded.
'AvayaConfigurationService.vshost.exe' (Managed): Loaded 'C:\Development\Src\trunk\ntity\AvayaConfigurationService\AvayaConfigurationService\bin\Debug\IPOConfigService.dll', No symbols loaded.

Loaded 'C:\Development\src...\bin\Debug\AvayaConfigurationService.exe', Symbols loaded.

Это указывает, что PDB был найден и загружен отладчиком IDE.

Как обозначено другими При исследовании стековых фреймов в рамках приложения необходимо смочь видеть символы от CorporateComponent.pdb. Если Вы не делаете затем, возможно, третье лицо не включало информацию о символе в выпуск сборка PDB.

6
ответ дан 6 December 2019 в 14:12
поделиться

pdb содержит информацию потребности отладчика для корректного чтения стека. Ваши отслеживания стека будут содержать номера строки и названия символа стековых фреймов в модулях, для которых у Вас есть pdb.

Я дам два примера использований. Первым является очевидный ответ. Второе объясняет индексированный источником pdb's.

1-й пример использования...

В зависимости от соглашения о вызовах и какая оптимизация используемый компилятор, для отладчика не могло бы быть возможно вручную раскрутить стек через модуль, для которого у Вас нет pdb. Это может произойти с определенными сторонними библиотеками и даже для некоторых частей ОС.

Рассмотрите сценарий, в котором Вы встречаетесь с нарушением прав доступа в окнах OS. Отслеживание стека не раскручивается в Ваше собственное приложение потому что, что компонент ОС использует специальное соглашение о вызовах, которое путает отладчик. Если Вы настраиваете свой путь символа для загрузки общедоступного pdb's ОС, то существует хороший шанс, что отслеживание стека раскрутится в приложение. Это позволяет Вам видеть точно, какие аргументы Ваш собственный код передал в системный вызов ОС. (и подобный пример для AV в сторонней библиотеке или даже в Вашем собственном коде)

2-й пример использования...

У Pdb есть другое очень полезное свойство - они могут интегрироваться с некоторыми системами управления исходным кодом, использующими функцию, что Microsoft называет "исходную индексацию". Индексированный источником pdb содержит команды управления исходным кодом, которые указывают, как выбрать от управления исходным кодом точные версии файла, которые использовались для создания компонента. Отладчики Microsoft понимают, как выполнить команды для автоматической выборки файлов во время сеанса отладки. Это - мощная функция, которая сохраняет отладку egineer от необходимости вручную синхронизировать исходное дерево к корректной маркировке для данной сборки. Это особенно полезно для удаленных сеансов отладки, и для анализа катастрофического отказа выводит вскрытие.

"Средства отладки для окон" установка (windbg) содержат документ под названием srcsrv.doc, который обеспечивает пример, демонстрирующий, как использовать srctool.exe для определения, какие исходные файлы индексируются источником в данном pdb.

Отвечать на Ваш вопрос, "как я знаю", функция "модулей" в отладчике может сказать Вам, какие модули имеют соответствующий pdb. В windbg используют команду "lml". В Visual Studio выбирают модули из где-нибудь в меню отладки. (извините, у меня нет текущей версии Visual Studio удобной),

5
ответ дан 6 December 2019 в 14:12
поделиться

PDB является файлом базы данных, который отображает инструкции на их номера строки в исходном коде поэтому, когда Вы получите отслеживание стека, Вы получите номера строки для кода. Если это будет неуправляемый DLL затем, то файл PDB также даст Вам названия функций в отслеживании стека, тогда как та информация обычно только доступна для управляемого DLLs без PDBs.

4
ответ дан 6 December 2019 в 14:12
поделиться

Основное, которое я получаю от pdb, является номерами строки и реальными именами методов для отслеживаний стека.

0
ответ дан 6 December 2019 в 14:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: