Post

Win11安装MSYS2

  1. 下载、安装 MSYS2
    • 下载:官网清华镜像站
    • 安装:过程可能卡在 “Updating trust database…” 不动的情况,断网可解决
  2. MSYS2 中安装包
    • 更新 pacman -Syu
    • 查找make版本 pacman -Ss make
    • 安装 msys/make pacman -S msys/make
    • 类似的,安装make, gcc, gdb, vim
  3. gdb命令行调试
    • 写好test.cpp执行 g++ -g test.cpp,必须加-g 在使用 -g 选项时,编译器会在生成的可执行文件中包含符号表、源代码路径、变量名称等调试信息。这使得在调试过程中能够在源代码级别进行断点设置、变量查看等操作,而不仅仅是在汇编或机器代码级别进行调试。
    • 根据生成的可执行文件,进入调试模式 gdb a.exe
    • 查看代码,显示每行行号 (gdb) list
    • 查看指示 (gdb) help
    • 在第4行打断点 (gdb) b 4
    • 运行 r
    • 步进 n
    • 退出调试模式 quit
  4. 问题:为什么一定要先运行cpp文件得到可执行文件后,才能debug

    答:在使用调试工具(如GDB)进行调试时,通常需要一个可执行文件,以便工具能够理解和分析源代码、二进制代码之间的关系。以下是一些原因:

    调试信息: 可执行文件包含了与源代码相关的调试信息,例如变量名称、行号等。这些信息是编译器在编译过程中生成的,它们帮助调试器将源代码映射到二进制代码,从而更容易地理解和跟踪代码执行过程。

    符号表: 可执行文件中还包含符号表,其中包含了源代码中定义的各种符号(如变量、函数等)的信息。调试器使用这些信息来将二进制代码中的地址映射到源代码中的相应符号。

    运行环境: 可执行文件是在特定平台上编译的二进制代码,它包含了与该平台相关的机器指令。调试器需要这个可执行文件来模拟程序的运行环境,并能够在这个环境中执行源代码。

    执行路径: 调试器需要知道程序的执行路径,即程序在运行时经过的函数调用路径。这个路径信息包含在可执行文件中,而调试器可以利用这些信息来设置断点、单步执行等调试操作。

    在C++中,通常的开发流程是先编写源代码(.cpp文件),然后使用编译器将其编译成可执行文件。这个可执行文件包含了上述的调试信息和符号表,为调试器提供了足够的信息来进行有效的调试。如果直接在源代码上进行调试,调试器将无法准确地映射源代码和二进制代码之间的关系,从而限制了调试的效果。

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.