Clang是否支持`-g1`

时间:2014-04-09 14:36:54

标签: clang

我找到了一个关于此here的旧邮件列表帖子,但是,文档中没有任何进一步的信息或任何内容。

Clang支持那面旗帜吗?我在示例中尝试了-g1-g2-g3-g,但结果始终相同,所以看起来并非如此。

这是计划好的吗?

1 个答案:

答案 0 :(得分:2)

目前clang没有,但它没有很好的记录。虽然它接受了你提到的选项,但它们都像-g一样对待它们。从clang源代码中,llvm/tools/clang/lib/Driver/Tools.cpp出现此代码(在205900年第2825行):

  // Use the last option from "-g" group. "-gline-tables-only" and "-gdwarf-x"
  // are preserved, all other debug options are substituted with "-g".
  Args.ClaimAllArgs(options::OPT_g_Group);
  if (Arg *A = Args.getLastArg(options::OPT_g_Group)) {
    if (A->getOption().matches(options::OPT_gline_tables_only)) {
      // FIXME: we should support specifying dwarf version with
      // -gline-tables-only.
      CmdArgs.push_back("-gline-tables-only");
      // Default is dwarf-2 for darwin.
      if (getToolChain().getTriple().isOSDarwin())
        CmdArgs.push_back("-gdwarf-2");
    } else if (A->getOption().matches(options::OPT_gdwarf_2))
      CmdArgs.push_back("-gdwarf-2");
    else if (A->getOption().matches(options::OPT_gdwarf_3))
      CmdArgs.push_back("-gdwarf-3");
    else if (A->getOption().matches(options::OPT_gdwarf_4))
      CmdArgs.push_back("-gdwarf-4");
    else if (!A->getOption().matches(options::OPT_g0) &&
             !A->getOption().matches(options::OPT_ggdb0)) {
      // Default is dwarf-2 for darwin.
      if (getToolChain().getTriple().isOSDarwin())
        CmdArgs.push_back("-gdwarf-2");
      else
        CmdArgs.push_back("-g");
    }
  }

正如您在前几行所看到的那样,任何尚未消除的-g选项(例如-g7)都会在此例程中转换为普通-g { {1}}。

我不知道有任何改变这个的计划,但我也不是一个铿锵的开发者。您可能想在邮件列表中询问。

有关已记录的开关,请参阅the online manual,有关详细信息,请参阅the source code for Tools.cpp以查看剩余的选项处理。