簡體   English   中英

如何在Windows 10 x64上使用Bazel構建和調試C ++可執行文件

[英]How to build and debug a c++ executable using Bazel on windows 10 x64

我想使用帶bazel的生成的可執行文件調試c ++代碼,但是由於某種原因,bazel不在x64體系結構上構建代碼,或者該可執行文件在調試模式下不起作用。

我的檔案是

main.cpp中

#include <iostream>

int main()
{
    int a = 3;
    int b = 5;
    int c = a + b;

    /* code */
    std::cout << "Hello world" << std::endl;
    return 0;
}

我使用此命令來構建我的應用

bazel build // src / app:main --strip =從不--compilation_mode = dbg

但是當我在設置斷點后嘗試調試應用程序時,我在控制台中收到此錯誤

例如,如果我跑步

gdb main.exe

然后

(gdb)打破主要

我懂了

沒有加載符號表。

當我使用bazel build命令構建代碼時,質疑如何在main.exe中加載符號?

Windows上的Bazel默認情況下使用MSVC構建C ++代碼。 我認為GCC使用的調試數據格式不同於MSVC的.pdb文件,這可以解釋為什么您不能使用gdb調試Bazel構建的二進制文件。

要使用MingW GCC而不是默認的MSVC進行構建,必須告訴Bazel使用該編譯器:

bazel build -c dbg --compiler=mingw-gcc //src/app:main

這是有關--compiler標志值[1]的更多信息。

這首先對我來說失敗了,所以我遵循https://stackoverflow.com/a/30071634/7778502的說明並安裝了mingw-w64-x86_64-gcc

現在,我可以使用Bazel構建//src/app:main ,並使用gdb設置斷點:

$ gdb /c/src/so53840959/CPP_TESTS/project/bazel-bin/main/app.exe
GNU gdb (GDB) 7.11.1
...
Traceback (most recent call last):
  File "<string>", line 3, in <module>
ImportError: No module named libstdcxx.v6.printers
/etc/gdbinit:6: Error in sourced command file:
Error while executing Python code.
Reading symbols from /c/src/so53840959/CPP_TESTS/project/bazel-bin/main/app.exe...done.
(gdb) break main
Breakpoint 1 at 0x401568
(gdb)

我對gdb不熟悉,但是Error看起來是良性的,並且一切正常。


[1]為了找到這個--compiler標志值,我查看了已注冊的C ++工具鏈。 我不知道執行此操作的用戶友好方式(並且我不想在此處詳細介紹工具鏈),但是我們需要知道的是:

  1. 運行bazel query @local_config_cc//:toolchain --output=build

    這將打印C ++工具鏈規則的定義,這是一個自動生成的構建規則,告訴Bazel它可以使用哪些C ++工具鏈。

  2. 看一下以toolchains = {...開頭的行。

    它是一個字典,其中每個鍵都定義--cpu標志值,或--cpu--compiler標志值對。 在這里無需詳細介紹語法,您可能會看到帶有鍵x64_windows|mingw-gcc的條目,這意味着可以使用--cpu=x64_windows--compiler=mingw-gcc進行構建。 (由於--cpu=x64_windows是Windows上的默認設置,因此可以將其省略。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM