gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:13:11 25 4
gpt4 key购买 nike

在我的 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

最佳答案

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

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

您使用的是 Windows cmd.exe 命令行吗?或者其他东西,比如 Powershell ?我从来没有设法让调试器在这些环境中正常工作,但是使用 Cygwin 就容易多了。 ,这是一个适用于 Windows 的 bash shell(它在其安装文件夹中创建一个“模拟”linux 环境,因此您拥有 bash shell 所需的所有/usr、/bin、/etc 文件夹)这样您就可以像在 UNIX 系统上一样实际使用 gdb

如果上述方法听起来比节省时间更麻烦,那么我会推荐另一个调试器,例如 Visual Studio 调试器。事实上,也许是像 Dr.Memory 这样的内存分析工具可以给你你需要的东西

关于c - 在 Windows 上使用 clang 编译时如何获取调试符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58117551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com