Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: MrDron от Февраль 28, 2020, 14:45



Название: QBS и отладочная информация PDB
Отправлено: MrDron от Февраль 28, 2020, 14:45
Здравствуйте. Под виндой в релизе делаю генерацию отладочной информации в PDB файлы. Они генерятся в каталоге сборки. Компилятор msvc

Код:
cpp.linkerFlags: {
    var flags = base;
    if (qbs.buildVariant == "release" && qbs.toolchain.contains("msvc")) {
        flags.push("/DEBUG");
        flags.push("/PDBALTPATH:pdb/%_PDB%");
    }
    return flags;
}

А как бы мне теперь эти сгенерированые файлы положить в каталог "pdb" приложения?

Пробовал через Rule и FileTagger, но FileTagger ищет по шаблону только в папке с исходниками, а не в каталоге сборки.
Код:
FileTagger {
    patterns: [ "*.pdb" ]
    fileTags: [ "pdb_files" ]
}

Может кто нибудь подсказать? Спасибо!


Название: Re: QBS и отладочная информация PDB
Отправлено: Авварон от Февраль 28, 2020, 17:27

Код:
cpp.linkerFlags: {
    var flags = base;
    if (qbs.buildVariant == "release" && qbs.toolchain.contains("msvc")) {
        flags.push("/DEBUG");
        flags.push("/PDBALTPATH:pdb/%_PDB%");
    }
    return flags;
}

Это не совсем правильно, правильно cpp.debugInformation:true и cpp.separateDebugInformation:true
По сути "дебаг" это сборка с дебаг инфо и без оптимизаций:
Код:
    property bool debugInformation: (buildVariant == "debug")
    property string optimization: (buildVariant == "debug" ? "none" : "fast")

Отвечая на основной вопрос, MSVC модуль назначает отладочным символам тэги "debuginfo_app" (для бинарника), "debuginfo_dll" (для .dll) и "debuginfo_cl" (для статических либ). Ставить надо эти тэги, вот примеры из самой qbs:

Код:
    Group {
        fileTagsFilter: product.type
            .concat(qbs.buildVariant === "debug" ? ["debuginfo_app"] : [])
        qbs.install: true
        qbs.installDir: targetInstallDir
        qbs.installSourceBase: buildDirectory
    }


Код:
    Group {
        fileTagsFilter: [isForDarwin ? "loadablemodule" : "dynamiclibrary"]
            .concat(qbs.buildVariant === "debug"
        ? [isForDarwin ? "debuginfo_loadablemodule" : "debuginfo_dll"] : [])
        qbs.install: true
        qbs.installDir: targetInstallDir
        qbs.installSourceBase: buildDirectory
    }

Да, и стоит упомянуть очевидное - если вы руками передаете флаги компилятору то никто артефакты с указанными тэгами не создаст =)

Код:
            if (product.cpp.debugInformation && product.cpp.separateDebugInformation) {
                artifacts.push({
                    fileTags: ["debuginfo_app"],
                    filePath: ...
                });
            }



Название: Re: QBS и отладочная информация PDB
Отправлено: MrDron от Март 03, 2020, 12:10
Спасибо большое! Работает.