<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>VS Code on farmer3-c Blog</title><link>https://farmer3-c.github.io/tags/vs-code/</link><description>Recent content in VS Code on farmer3-c Blog</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 21 Apr 2026 23:20:25 +0800</lastBuildDate><atom:link href="https://farmer3-c.github.io/tags/vs-code/index.xml" rel="self" type="application/rss+xml"/><item><title>VScode断点使用</title><link>https://farmer3-c.github.io/posts/vscode/</link><pubDate>Tue, 21 Apr 2026 23:20:25 +0800</pubDate><guid>https://farmer3-c.github.io/posts/vscode/</guid><description>&lt;h1 id="前因"&gt;前因&lt;/h1&gt;
&lt;p&gt;今天遇到了一个问题，c++编程解决问题时不能正确输出，于是我想使用断点调试来找出问题所在。此前很少使用断点调试，对于调试的几个按钮仅仅认为向下的箭头是向下运行一步、向上的箭头是回退一步、方框是退出调试。&lt;/p&gt;
&lt;p&gt;于是：出现
（1）
&lt;img alt="1" loading="lazy" src="https://farmer3-c.github.io/img/vscode/1.png"&gt;&lt;/p&gt;
&lt;p&gt;本应长度为3的数组b却是&lt;code&gt;std::vector of length -1198221809, capacity 2069355498&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;继续点击向下的箭头；结果在几个头文件中来回转跳
（2）
&lt;img alt="2" loading="lazy" src="https://farmer3-c.github.io/img/vscode/2.png"&gt;&lt;/p&gt;
&lt;p&gt;回退到（1）的状态，再点击&lt;code&gt;step over&lt;/code&gt;符号，数组b的长度恢复正常：
（3）
&lt;img alt="3" loading="lazy" src="https://farmer3-c.github.io/img/vscode/3.png"&gt;&lt;/p&gt;
&lt;p&gt;不知道其中原因，我查了下断点用法。&lt;/p&gt;
&lt;h1 id="断点使用"&gt;断点使用&lt;/h1&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;操作&lt;/th&gt;
&lt;th&gt;描述&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;继续 / 暂停 F5&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;继续&lt;/strong&gt;：恢复程序/脚本的正常执行（直到下一个断点）。 &lt;strong&gt;暂停&lt;/strong&gt;：检查当前行正在执行的代码并逐行进行调试。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;单步跳过 F10&lt;/td&gt;
&lt;td&gt;将下一行代码作为一个整体执行，而不进入该方法的内部步骤。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;单步调试 F11&lt;/td&gt;
&lt;td&gt;进入下一行代码的方法，以便逐行跟踪其执行过程。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;单步跳出 Shift+F11&lt;/td&gt;
&lt;td&gt;在方法或子程序内部时，完成当前方法的剩余行并返回到之前的执行上下文，就像将其作为一个命令执行一样。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;重启 Ctrl+Shift+F5&lt;/td&gt;
&lt;td&gt;终止当前程序执行并使用当前的运行配置再次开始调试。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;停止 Shift+F5&lt;/td&gt;
&lt;td&gt;终止当前程序执行。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;单步调试： 进入下一行代码的方法，以便逐行跟踪其执行过程。意思是说要把最基础的编译文件显示出来，单步跳过封装了执行单步调试的所有过程，可以一直按 F11 达到 F10 所完成的任务。&lt;/p&gt;
&lt;p&gt;之前以为按f11是在几个头文件中来回转跳，其实不是。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;参考&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://vscode.js.cn/docs/debugtest/debugging"&gt;使用 Visual Studio Code 调试代码&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><content:encoded><![CDATA[<h1 id="前因">前因</h1>
<p>今天遇到了一个问题，c++编程解决问题时不能正确输出，于是我想使用断点调试来找出问题所在。此前很少使用断点调试，对于调试的几个按钮仅仅认为向下的箭头是向下运行一步、向上的箭头是回退一步、方框是退出调试。</p>
<p>于是：出现
（1）
<img alt="1" loading="lazy" src="/img/vscode/1.png"></p>
<p>本应长度为3的数组b却是<code>std::vector of length -1198221809, capacity 2069355498</code>。</p>
<p>继续点击向下的箭头；结果在几个头文件中来回转跳
（2）
<img alt="2" loading="lazy" src="/img/vscode/2.png"></p>
<p>回退到（1）的状态，再点击<code>step over</code>符号，数组b的长度恢复正常：
（3）
<img alt="3" loading="lazy" src="/img/vscode/3.png"></p>
<p>不知道其中原因，我查了下断点用法。</p>
<h1 id="断点使用">断点使用</h1>
<table>
	<thead>
			<tr>
					<th>操作</th>
					<th>描述</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>继续 / 暂停 F5</td>
					<td><strong>继续</strong>：恢复程序/脚本的正常执行（直到下一个断点）。 <strong>暂停</strong>：检查当前行正在执行的代码并逐行进行调试。</td>
			</tr>
			<tr>
					<td>单步跳过 F10</td>
					<td>将下一行代码作为一个整体执行，而不进入该方法的内部步骤。</td>
			</tr>
			<tr>
					<td>单步调试 F11</td>
					<td>进入下一行代码的方法，以便逐行跟踪其执行过程。</td>
			</tr>
			<tr>
					<td>单步跳出 Shift+F11</td>
					<td>在方法或子程序内部时，完成当前方法的剩余行并返回到之前的执行上下文，就像将其作为一个命令执行一样。</td>
			</tr>
			<tr>
					<td>重启 Ctrl+Shift+F5</td>
					<td>终止当前程序执行并使用当前的运行配置再次开始调试。</td>
			</tr>
			<tr>
					<td>停止 Shift+F5</td>
					<td>终止当前程序执行。</td>
			</tr>
	</tbody>
</table>
<p>单步调试： 进入下一行代码的方法，以便逐行跟踪其执行过程。意思是说要把最基础的编译文件显示出来，单步跳过封装了执行单步调试的所有过程，可以一直按 F11 达到 F10 所完成的任务。</p>
<p>之前以为按f11是在几个头文件中来回转跳，其实不是。</p>
<hr>
<p><strong>参考</strong></p>
<ul>
<li><a href="https://vscode.js.cn/docs/debugtest/debugging">使用 Visual Studio Code 调试代码</a></li>
</ul>
]]></content:encoded></item><item><title>System.IO.FileLoadException: 未能加载文件或程序集“WindowsDebugLauncher……</title><link>https://farmer3-c.github.io/posts/systemiofileloadexception-windowsdebuglauncher/</link><pubDate>Tue, 03 Feb 2026 00:18:48 +0800</pubDate><guid>https://farmer3-c.github.io/posts/systemiofileloadexception-windowsdebuglauncher/</guid><description/><content:encoded><![CDATA[<h2 id="问题">问题</h2>
<p>在使用VS code编写C++程序时，运行程序时出现了以下错误：</p>
<p><code>未经处理的异常:  System.IO.FileLoadException: 未能加载文件或程序集“WindowsDebugLauncher, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。强名称验证失败。 (异常来自 HRESULT:0x8013141A) ---&gt; System.Security.SecurityException: 强名称验证失败。 (异常来自 HRESULT:0x8013141A) --- 内部异常堆栈跟踪的结尾 ---</code></p>
<p><img alt="1" loading="lazy" src="/img/in-post/vscode_wrn/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202026-02-03%20002612.png"></p>
<p><img alt="2" loading="lazy" src="/img/in-post/vscode_wrn/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202026-02-03%20002821.png"></p>
<h2 id="解决方法">解决方法</h2>
<p>异常信息的重点在：强名称验证失败。</p>
<p>这个问题主要出现在c#开发，在c#中，程序集的强名称是由程序集的公钥和版本号组成的。如果程序集的强名称验证失败，就会出现这个错误。</p>
<p>所以我想先尝试临时禁用强名称验证（仅用于调试环境），以查看是否能解决问题。</p>
<p>因为没有安装 sn.exe 工具，所以通过安装 .NET SDK 来获取 sn.exe 工具。</p>
<p>安装好后，我灵机一动，是不是可以删除VS code “PORTS”面板的进程，然后再重新运行程序，看看是否能解决问题。</p>
<p><img alt="3" loading="lazy" src="/img/in-post/vscode_wrn/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202026-02-03%20013105.png"></p>
<p>于是我在“PORTS”面板中 结束了所有进程 ，然后再重新打开VS code,运行程序，问题解决了。</p>
<h4 id="猜测原因">猜测原因</h4>
<blockquote>
<p>首先要明确：这个错误表面是 C++ 运行报错，实际是 VS Code 的 C/C++ 调试插件依赖的.NET 程序集出了问题，不是 C++ 代码本身有逻辑错误。</p>
</blockquote>
<blockquote>
<p>WindowsDebugLauncher是 VS Code 的 C/C++ 调试插件（ms-vscode.cpptools）在 Windows 平台上依赖的调试启动程序集（基于.NET Framework 开发），它带有强名称签名（公钥令牌正是b03f5f7f11d50a3a）。强名称验证失败的核心是：系统在加载这个程序集时，验证它的签名完整性、版本一致性、公钥合法性时出了问题，导致拒绝加载，最终调试器无法启动，抛出FileLoadException。</p>
</blockquote>
<p><strong>调试进程残留</strong></p>
<ul>
<li>
<p>之前多次启动 C++ 程序调试，部分调试进程（hello.exe、use4set.exe）没有正常退出，而是在后台残留，对应的cppdbg调试器也没有释放。</p>
</li>
<li>
<p>这些残留进程会占用WindowsDebugLauncher程序集的资源，或者导致程序集被锁定在 “已加载但未释放” 的状态，后续再次启动调试时，系统无法重新验证该程序集的强名称（相当于 “资源被占用，验证流程无法正常执行”），从而抛出验证失败错误。</p>
</li>
<li>
<p>结束 PORTS 面板所有进程、重启 VS Code 后，残留进程被清理，程序集资源被释放，后续调试时验证流程正常执行，问题解决。</p>
</li>
</ul>
]]></content:encoded></item></channel></rss>