Gdb QtCreator:发布版本和调试版本之间的技术差异

Gdb QtCreator:发布版本和调试版本之间的技术差异,gdb,qt-creator,qmake,Gdb,Qt Creator,Qmake,关于使用QtCreator构建过程的一系列问题: 在QtCreator中,您可以在版本、调试和探查器构建之间进行区分。C.f。下图: 这些东西到底是做什么的?我无法在互联网上找到答案。 特别是,我感兴趣的是调试模式是否将“Debug”项添加到qmake变量“CONFIG”中,“-g”开关要求g++为gdb(我的调试器)等添加调试信息 哪个调试器是“CONFIG+=debug”的意思:“普通”调试器GDB(在我的例子中)还是QML调试器 为什么在项目文件中使用“+=”而不是“*=”如此常见?

关于使用QtCreator构建过程的一系列问题:

在QtCreator中,您可以在版本、调试和探查器构建之间进行区分。C.f。下图:

  • 这些东西到底是做什么的?我无法在互联网上找到答案。 特别是,我感兴趣的是调试模式是否将“Debug”项添加到qmake变量“CONFIG”中,“-g”开关要求g++为gdb(我的调试器)等添加调试信息

  • 哪个调试器是“CONFIG+=debug”的意思:“普通”调试器GDB(在我的例子中)还是QML调试器

  • 为什么在项目文件中使用“+=”而不是“*=”如此常见?如果qmake变量已经存在,则第二个变量不会将项添加到该变量中。这是否意味着qmake特殊变量中的多个相等项是无害的

  • 非常感谢

  • 您可以通过观察在“编译器输出”窗格中调用的qmake命令行来查看它们的功能:

    • 发布:
      qmake MyProject.pro“CONFIG+=qtquickcompiler”
    • 调试:
      qmake MyProject.pro“CONFIG+=Debug”“CONFIG+=qml\u Debug”
    • 配置文件:
      qmake MyProject.pro“CONFIG+=qml\u debug”“CONFIG+=qtquickcompiler”“CONFIG+=force\u debug\u info”“CONFIG+=separate\u debug\u info”
    gdb没有
    -g
    选项,您是指gcc吗?
    CONFIG+=debug
    的作用是将
    -g
    选项传递给gcc,正如您在
    Qt/mkspecs/common/gcc base.conf中的这一行中所看到的:

    QMAKE_CFLAGS_DEBUG += -g
    
  • 编译调试版本只意味着编译的库和可执行文件将不可优化,并包含对调试人员有用的额外信息。不需要在特定的调试器或任何调试器中执行。您也可以在调试器中运行发布版本,尽管您可能会发现结果不太可靠

  • qmake特殊变量中的多个相等项通常是无害的,在
    CONFIG
    的情况下,它们甚至可能是有意义的。例如,
    CONFIG
    同时包含
    debug
    release
    是合法的。在这种情况下,列表中的最后一个将生效。在下面的例子中考虑<代码> += 和<代码> *= < /代码>:

    CONFIG = debug
    CONFIG += release
    CONFIG += debug   # now CONFIG = debug release debug, so debug is the effective mode
    
    CONFIG = debug
    CONFIG += release
    CONFIG *= debug   # now CONFIG = debug release, so release is the effective mode
    
    在命令行中,
    *=
    可能不受欢迎还有另一个原因:许多shell将包含
    *
    的任何参数视为要展开的文件glob/通配符,除非它被转义或引用