[在Windows上使用clang编译时如何获取调试符号

问题描述 投票:0回答:1

在Windows 10计算机上设置clang时,我无法使调试器正常工作。编译似乎可以正常运行,至少对于我尝试过的简单“ hello,world”程序而言。但是,当我尝试在此测试程序(或我尝试过的任何其他程序)上运行lldb或gdb调试器时,它无法识别函数名。

这是我的C程序代码:

#include <stdio.h>

int main(void) {
    puts("Hello, world!");
    return 0;
}

我知道这里没什么特别壮观的。我正在使用以下命令进行编译:

> clang -g -O0 hello.c -o hello.exe

然后我尝试运行调试器:

> lldb hello
(lldb) target create "hello"
Current executable set to 'hello' (x86_64).
(lldb) b main
Breakpoint 1: no locations (pending).
WARNING:  Unable to resolve breakpoint to any actual locations.
(lldb) r
Process 12156 launched: 'C:\Users\********\Projects\clang-test\hello.exe' (x86_64)
Process 12156 exited with status = 0 (0x00000000)
(lldb)

显然,无法识别符号“ main”,并且程序在“ main”功能开始时并未停止,而是运行完毕(在另一个控制台窗口中,因此此处没有程序输出)。

我如何使调试符号起作用?在另一个不同的stackoverflow答案中,我发现添加编译器选项“ -g -O0”应该可以解决问题,但是如您所见,这不能为我解决问题。如果代码与可执行文件不在同一目录中,那么我也找到了另一个关于如何设置调试的stackoverflow答案,但这与我的情况无关:当前的工作目录与包含代码和可执行文件的目录相同在其中。

某些版本信息:

> clang --version
clang version 9.0.0 (tags/RELEASE_900/final)
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Program Files\LLVM\bin

> lldb --version
lldb version 9.0.0
c windows clang lldb
1个回答
0
投票

您提供的“ -g -O0”选项确实应该让调试器从可执行文件中知道它需要的所有符号。

因此,我怀疑问题出在其他地方,可能与您的终端有关,或者与您的LLDB版本/实现有关。

您是否使用Windows cmd.exe命令行?还是诸如Powershell之类的东西?我从未设法使调试器在这些环境中正常工作,但是使用Cygwin则要容易得多,它是Windows的bash外壳(它在其install文件夹中创建了一个“模拟” Linux环境,因此您拥有bash shell需要的/ usr,/ bin和/ etc文件夹)这样,您实际上可以像在UNIX系统上一样使用gdb

如果上面的方法听起来不像是费时的麻烦,那么我会推荐另一个调试器,例如Visual Studio调试器。实际上,也许像Dr.Memory这样的内存分析工具可以满足您的需求

© www.soinside.com 2019 - 2024. All rights reserved.