我找到了一个关于此here的旧邮件列表帖子,但是,文档中没有任何进一步的信息或任何内容。
Clang支持那面旗帜吗?我在示例中尝试了-g1
,-g2
,-g3
和-g
,但结果始终相同,所以看起来并非如此。
这是计划好的吗?
答案 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以查看剩余的选项处理。