微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么在 Windows 上将 -ffreestanding 指定为 clang++ 会阻止 Visual Studio 在调试时显示调用堆栈?

如何解决为什么在 Windows 上将 -ffreestanding 指定为 clang++ 会阻止 Visual Studio 在调试时显示调用堆栈?

在Windows上编译C++时,对于Windows,使用LLVM 12的clang++;为什么指定 -ffreestanding 会阻止输出某些调试信息,从而导致调试器(例如 Visual Studio 2019)无法显示调用堆栈?

给定以下简单的示例程序:

// call a few functions deep so there's something to look at in the debugger
int f1()
{
  return 1;
}

int f2()
{
  return f1() + 2;
}

int f3()
{
  return f2() + 3;
}

int main()
{
  return f3();
}

// include the CRT entry point,since we aren't linking with a CRT
int mainCRTStartup()
{
  return main();
}

使用和不使用 -ffreestanding 进行编译:

clang++ -g -c main.cpp -o main.hosted.o
lld-link -debug main.hosted.o -out:hosted.exe

clang++ -ffreestanding -g -c main.cpp -o main.freestanding.o
lld-link -debug main.freestanding.o -out:freestanding.exe

生成一个可执行文件 -hosted.exe- 在调试时显示调用堆栈,另一个 -freestanding.exe- 不显示

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。