Loading docs/tools/cmd.md +31 −5 Original line number Diff line number Diff line Loading @@ -4,7 +4,7 @@ author: StudyingFather, ayalhw 本页面将简要介绍命令行的一些使用方法。 ## 一些常用命令 ## 一些常用命令[^1] ### 文件系统相关 Loading @@ -13,7 +13,7 @@ author: StudyingFather, ayalhw - 相对路径:用相对当前路径的位置关系来描述位置。例如当前路径为 `~/folder` ,则 `./a.cpp` 实际上指的就是 `~/folder/a.cpp` 这个文件。 **随着当前路径的变化,相对路径描述的位置也可能发生改变** 。 - 绝对路径:用完整的路径来描述位置。例如 `~/folder/a.cpp` 就是一个绝对路径的例子。 **绝对路径描述的位置不随当前路径的变化而改变** 。 Windows/Linux 用 `.` 代表当前目录, `..` 代表当前目录的父目录。特别地,在 Linux 下,用 `~` 表示用户主目录。 Windows/Linux 用 `.` 代表当前目录, `..` 代表当前目录的父目录。特别地,在 Linux 下,用 `~` 表示用户主目录(注意 `~` 由 shell 展开,因此在其他地方可能不可用)。 在 Windows/Linux 下,使用 `cd <目录>` 命令可以切换当前的目录。例如, `cd folder` 会切换到当前目录的 `folder` 子目录; `cd ..` 会切换到当前目录的父目录。 Loading @@ -31,7 +31,10 @@ author: StudyingFather, ayalhw command < input > output ``` 例如, `./prog < 1.in > 1.out` 这个命令就将让 `prog` 这个程序从当前目录下的 `1.in` 中读入数据,并将程序输出写入到 `1.out` 。 例如, `./prog < 1.in > 1.out` 这个命令就将让 `prog` 这个程序从当前目录下的 `1.in` 中读入数据,并将程序输出覆盖写入到 `1.out` 。 ???+ warning `1.out` 原本的内容会被覆盖,如果想要在原输出文件末尾追加写入,请使用 `>>` ,即 `./prog >> 1.out` 的方式做输出重定向 事实上,大多数 OJ 都采用了这样的重定向机制。选手提交的程序采用标准输入输出,通过重定向机制,就可以让选手的程序从给定的输入文件读入数据,输出到指定的输出文件,再进行文件比较就可以评测了。 Loading Loading @@ -77,6 +80,10 @@ command < input > output - `-O1` , `-O2` , `-O3` :对编译的程序进行优化,数字越大表示采用的优化手段越多(开启优化会影响使用 gdb 调试)。 - `-DDEBUG` :在编译时定义 `DEBUG` 符号(符号可以随意更换,例如 `-DONLINE_JUDGE` 定义了 `ONLINE_JUDGE` 符号)。 - `-UDEBUG` :在编译时取消定义 `DEBUG` 符号。 - `-lm` , `-lgmp` : 链接某个库(此处是 math 和 gmp,具体使用的名字需查阅库文档,但一般与库名相同)。 ???+ note 在 Linux 下,如使用了标准 C 库里的 math 库( `math.h` ),则需在编译时添加 `-lm` 参数。[^have-to-link-libm-in-gcc] ### 命令行调试 Loading @@ -92,9 +99,28 @@ command < input > output - `continue` ( `c` ):在程序遇到断点后继续执行,直到程序结束运行或到达下一个断点。 - `next` ( `n` ):执行当前行语句,如果当前行有函数调用,则将其视为一个整体执行。 - `step` ( `s` ):执行当前行语句,如果当前行有函数调用,则进入该函数内部。 - `display` ( `disp` ):指定程序暂停时显示的表达式。 - `finish` ( `fin` ):继续执行至当前函数返回。 - `call` :调用某个函数,例如: `call f(2)` (以参数 2 调用函数 f)。 - `quit` ( `q` ):退出 gdb。 - `display` ( `disp` ):指定程序暂停时显示的表达式。 - `print` ( `p` ):打印表达式的值。 `display` 和 `print` 指令都支持控制输出格式,其方法是在命令后紧跟 `/` 与格式字符,例如 `p/d test` (按照十进制打印变量 test 的值), 支持的格式字符有: | 格式字符 | 对应格式 | | ---- | ------------- | | d | 按十进制格式显示变量 | | x | 按十六进制格式显示变量 | | a | 按十六进制格式显示变量 | | t | 按二进制格式显示变量 | | c | 按字符格式显示变量 | | f | 按浮点数格式显示变量 | | u | 按十进制格式显示无符号整型 | | o | 按八进制格式显示变量 | ## 参考资料与注释 - 刘汝佳《算法竞赛入门经典(第 2 版)》附录 A 开发环境与方法 [^1]: 刘汝佳《算法竞赛入门经典(第 2 版)》附录 A 开发环境与方法 [^have-to-link-libm-in-gcc]: [Why do you have to link the math library in C?](https://stackoverflow.com/questions/1033898/why-do-you-have-to-link-the-math-library-in-c) Loading
docs/tools/cmd.md +31 −5 Original line number Diff line number Diff line Loading @@ -4,7 +4,7 @@ author: StudyingFather, ayalhw 本页面将简要介绍命令行的一些使用方法。 ## 一些常用命令 ## 一些常用命令[^1] ### 文件系统相关 Loading @@ -13,7 +13,7 @@ author: StudyingFather, ayalhw - 相对路径:用相对当前路径的位置关系来描述位置。例如当前路径为 `~/folder` ,则 `./a.cpp` 实际上指的就是 `~/folder/a.cpp` 这个文件。 **随着当前路径的变化,相对路径描述的位置也可能发生改变** 。 - 绝对路径:用完整的路径来描述位置。例如 `~/folder/a.cpp` 就是一个绝对路径的例子。 **绝对路径描述的位置不随当前路径的变化而改变** 。 Windows/Linux 用 `.` 代表当前目录, `..` 代表当前目录的父目录。特别地,在 Linux 下,用 `~` 表示用户主目录。 Windows/Linux 用 `.` 代表当前目录, `..` 代表当前目录的父目录。特别地,在 Linux 下,用 `~` 表示用户主目录(注意 `~` 由 shell 展开,因此在其他地方可能不可用)。 在 Windows/Linux 下,使用 `cd <目录>` 命令可以切换当前的目录。例如, `cd folder` 会切换到当前目录的 `folder` 子目录; `cd ..` 会切换到当前目录的父目录。 Loading @@ -31,7 +31,10 @@ author: StudyingFather, ayalhw command < input > output ``` 例如, `./prog < 1.in > 1.out` 这个命令就将让 `prog` 这个程序从当前目录下的 `1.in` 中读入数据,并将程序输出写入到 `1.out` 。 例如, `./prog < 1.in > 1.out` 这个命令就将让 `prog` 这个程序从当前目录下的 `1.in` 中读入数据,并将程序输出覆盖写入到 `1.out` 。 ???+ warning `1.out` 原本的内容会被覆盖,如果想要在原输出文件末尾追加写入,请使用 `>>` ,即 `./prog >> 1.out` 的方式做输出重定向 事实上,大多数 OJ 都采用了这样的重定向机制。选手提交的程序采用标准输入输出,通过重定向机制,就可以让选手的程序从给定的输入文件读入数据,输出到指定的输出文件,再进行文件比较就可以评测了。 Loading Loading @@ -77,6 +80,10 @@ command < input > output - `-O1` , `-O2` , `-O3` :对编译的程序进行优化,数字越大表示采用的优化手段越多(开启优化会影响使用 gdb 调试)。 - `-DDEBUG` :在编译时定义 `DEBUG` 符号(符号可以随意更换,例如 `-DONLINE_JUDGE` 定义了 `ONLINE_JUDGE` 符号)。 - `-UDEBUG` :在编译时取消定义 `DEBUG` 符号。 - `-lm` , `-lgmp` : 链接某个库(此处是 math 和 gmp,具体使用的名字需查阅库文档,但一般与库名相同)。 ???+ note 在 Linux 下,如使用了标准 C 库里的 math 库( `math.h` ),则需在编译时添加 `-lm` 参数。[^have-to-link-libm-in-gcc] ### 命令行调试 Loading @@ -92,9 +99,28 @@ command < input > output - `continue` ( `c` ):在程序遇到断点后继续执行,直到程序结束运行或到达下一个断点。 - `next` ( `n` ):执行当前行语句,如果当前行有函数调用,则将其视为一个整体执行。 - `step` ( `s` ):执行当前行语句,如果当前行有函数调用,则进入该函数内部。 - `display` ( `disp` ):指定程序暂停时显示的表达式。 - `finish` ( `fin` ):继续执行至当前函数返回。 - `call` :调用某个函数,例如: `call f(2)` (以参数 2 调用函数 f)。 - `quit` ( `q` ):退出 gdb。 - `display` ( `disp` ):指定程序暂停时显示的表达式。 - `print` ( `p` ):打印表达式的值。 `display` 和 `print` 指令都支持控制输出格式,其方法是在命令后紧跟 `/` 与格式字符,例如 `p/d test` (按照十进制打印变量 test 的值), 支持的格式字符有: | 格式字符 | 对应格式 | | ---- | ------------- | | d | 按十进制格式显示变量 | | x | 按十六进制格式显示变量 | | a | 按十六进制格式显示变量 | | t | 按二进制格式显示变量 | | c | 按字符格式显示变量 | | f | 按浮点数格式显示变量 | | u | 按十进制格式显示无符号整型 | | o | 按八进制格式显示变量 | ## 参考资料与注释 - 刘汝佳《算法竞赛入门经典(第 2 版)》附录 A 开发环境与方法 [^1]: 刘汝佳《算法竞赛入门经典(第 2 版)》附录 A 开发环境与方法 [^have-to-link-libm-in-gcc]: [Why do you have to link the math library in C?](https://stackoverflow.com/questions/1033898/why-do-you-have-to-link-the-math-library-in-c)