mirror of
https://github.com/LearningOS/rust-based-os-comp2022.git
synced 2026-02-08 04:43:27 +08:00
deploy: 44296c3f3a
This commit is contained in:
@@ -640,7 +640,8 @@ opt-level = 0
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>这段配置的意思是说,我们要覆盖默认release模式编译的参数,默认情况下,release模式的编译会移除debug信息,也就是 <code class="docutils literal notranslate"><span class="pre">debug=false</span></code> ,并且使用 <code class="docutils literal notranslate"><span class="pre">opt-level=2</span></code> ,也就是最高级别的优化进行编译,这样会导致打断点的时候很痛苦,很多代码都被优化的面目全非,对调试很不友好。</p>
|
||||
<p>在上述代码中,我们将debug信息保留,并且使用 <code class="docutils literal notranslate"><span class="pre">0</span></code> 级别进行优化,这里可选的其他级别还有 0、1、2、z、s 等。如果设置为 <code class="docutils literal notranslate"><span class="pre">1</span></code> 或 <code class="docutils literal notranslate"><span class="pre">2</span></code> ,感觉还是会有很多地方被优化,导致代码很多地方无法打断点。如果设置成0,意味着编译器没有编译优化,这样可以最大化地保证打断点的地方就是实际执行的地方。所以在这里优先选择设置为 <code class="docutils literal notranslate"><span class="pre">0</span></code> 级别。经过个人实验,感觉选择 <code class="docutils literal notranslate"><span class="pre">s</span></code> 级别可以在代码大小和优化之间取得一个比较好的平衡。</p>
|
||||
<p>在上述代码中,我们将debug信息保留,并且使用 <code class="docutils literal notranslate"><span class="pre">0</span></code> 级别进行优化。这里可选的其他级别还有 0、1、2、z、s 等。如果设置为 <code class="docutils literal notranslate"><span class="pre">1</span></code> 或 <code class="docutils literal notranslate"><span class="pre">2</span></code> ,编译器会进行多种优化,导致源代码与执行代码之间不能一一对应,从而导致在原代码的很多地方无法打断点,无法观察变量。如果设置成0,则意味着编译器不进行编译优化,这样可以最大化地保证打断点的地方就是实际执行的地方,使得可以几乎在源码的任意为止打断点,观察变量等。所以在这里,我们优先选择 <code class="docutils literal notranslate"><span class="pre">0</span></code> 级别优化选项。</p>
|
||||
<p>经过初步实验,也可以选择 <code class="docutils literal notranslate"><span class="pre">s</span></code> 级别进行基本的源码调试, <code class="docutils literal notranslate"><span class="pre">s</span></code> 级别是为了减少执行代码尺寸进行的编译优化选项,也许可以在代码大小和编译优化之间取得一个比较好的平衡。</p>
|
||||
<p>第四步,修改Makefile文件</p>
|
||||
<p>打开对应实验目录下的 <code class="docutils literal notranslate"><span class="pre">Makefile</span></code> 文件,例如你在开发os8,那么就是 <code class="docutils literal notranslate"><span class="pre">os8/Makefile</span></code> 文件,在其结尾添加如下几行:</p>
|
||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>dbg: build
|
||||
|
||||
@@ -430,7 +430,9 @@ VSCode 可视化调试支持
|
||||
|
||||
这段配置的意思是说,我们要覆盖默认release模式编译的参数,默认情况下,release模式的编译会移除debug信息,也就是 ``debug=false`` ,并且使用 ``opt-level=2`` ,也就是最高级别的优化进行编译,这样会导致打断点的时候很痛苦,很多代码都被优化的面目全非,对调试很不友好。
|
||||
|
||||
在上述代码中,我们将debug信息保留,并且使用 ``0`` 级别进行优化,这里可选的其他级别还有 0、1、2、z、s 等。如果设置为 ``1`` 或 ``2`` ,感觉还是会有很多地方被优化,导致代码很多地方无法打断点。如果设置成0,意味着编译器没有编译优化,这样可以最大化地保证打断点的地方就是实际执行的地方。所以在这里优先选择设置为 ``0`` 级别。经过个人实验,感觉选择 ``s`` 级别可以在代码大小和优化之间取得一个比较好的平衡。
|
||||
在上述代码中,我们将debug信息保留,并且使用 ``0`` 级别进行优化。这里可选的其他级别还有 0、1、2、z、s 等。如果设置为 ``1`` 或 ``2`` ,编译器会进行多种优化,导致源代码与执行代码之间不能一一对应,从而导致在原代码的很多地方无法打断点,无法观察变量。如果设置成0,则意味着编译器不进行编译优化,这样可以最大化地保证打断点的地方就是实际执行的地方,使得可以几乎在源码的任意为止打断点,观察变量等。所以在这里,我们优先选择 ``0`` 级别优化选项。
|
||||
|
||||
经过初步实验,也可以选择 ``s`` 级别进行基本的源码调试, ``s`` 级别是为了减少执行代码尺寸进行的编译优化选项,也许可以在代码大小和编译优化之间取得一个比较好的平衡。
|
||||
|
||||
|
||||
第四步,修改Makefile文件
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user