标签: visual-studio-debugging

Visual Studio中的“调试”->“启动外部程序”有什么用

我在 Visual Studio 2017 中创建了两个解决方案:

  • 第一个带有控制台应用程序的Example1
  • 第二个带有类库ClassLibrary1

ClassLibrary1 仅包含一个文件MyLib.cs

namespace ClassLibrary1
{
    public class MyLib
    {
        public string Foo()
        {
            return "Bla";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在第一个解决方案(带有 Example1 控制台应用程序的解决方案)中,我添加了现有项目 -> ClassLibrary1

我将 ClassLibrary1 配置为启动项目,并设置“调试”->“启动外部程序”,如图所示:

在此输入图像描述

所以现在您只需启动项目(在我的例子中为 ClassLibrary1)并且调试工作(我在返回“Bla”中设置断点;)。发生的情况是,Example1.exe 调用 ClassLibrary.MyLib 文件。

我是否理解了Debug -> Start external program正确的用法或者还有其他用法?

c# debugging visual-studio-debugging

5
推荐指数
1
解决办法
9187
查看次数

d3d->CreateDevice 中的 D3DERR_INVALIDCALL 导致 Allegro 5 D3D 程序启动时窗口闪烁

我正在调试在创建启用多重采样的 Allegro 5 Direct3D 窗口时窗口创建闪烁问题。我已将问题范围缩小到 allegro 的 d3d_disp.cpp 源文件中的窗口创建问题。但是,我无法从 DirectX 获得任何调试输出。闪烁仅发生在 D3D 模式(而非 OpenGL)下并且仅在启用多重采样时发生。另请注意,这只发生在 NVIDIA GPU 上运行程序时,而不是在我的集成 Intel 上运行程序时。

我运行的是 Windows 10。

我已尝试在 Visual Studio 2017 中对此进行调试,但它无法捕获 DX 的调试输出。我从 2010 年 6 月开始安装 DirectX SDK 时安装了 DirectX 调试符号。

我已经尝试重建 allegro 并链接到 gcc 中的 libd3dx9d.a,但我仍然无法进入 directx 函数调用,并且符号未加载。从 2010 年 6 月开始,MinGW-W64 GCC 8.1 或 DirectX SDK 中没有可用的 libd3d9d.a(注意 d 表示调试)库。

我尝试通过 PIX 运行我的程序,但它给了我一个无法解决的不兼容错误。

这是可测试的 allegro 5 示例代码:

#include <allegro5/allegro.h>
#include <allegro5/allegro_color.h>
#include <allegro5/allegro_primitives.h> 
#include <allegro5/allegro_direct3d.h>

#include <cstdio>
#include <climits>

int main(int …
Run Code Online (Sandbox Code Playgroud)

c++ debugging allegro5 visual-studio-debugging directx-9

5
推荐指数
1
解决办法
1765
查看次数

FatalExecutionEngineError after restarting debug session

Since a few weeks (months?) I've been sometimes getting the following exception after restarting my ASP.NET application inside Visual Studio 2017 / 2019 Enterprise. It only happens when IIS Express was already running my application and I needed to start a new debug session after recompiling.

每当发生这种情况时,我都必须终止 IIS Express ( taskkill /f /im iisexpress.exe) 并在 VS 中启动新的调试会话。我无法弄清楚是什么触发了这个问题。有一天,它开始在 VS 2017 Enterprise 上发生。也许是因为我收到了一些 Win10 更新?升级到 VS 2019 Enterprise 并没有解决问题。

托管调试助手“FatalExecutionEngineError”
消息=托管调试助手“FatalExecutionEngineError”:“运行时遇到致命错误。错误的地址位于线程 0x16b8 上的 0x45b30496。错误代码为0xc0000005。此错误可能是 CLR 中的错​​误或用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括 COM 互操作或 PInvoke 的用户编组错误,这可能会损坏堆栈。

报告了一些类似的问题,但要么不能解决我的问题,要么不适用: …

c# visual-studio visual-studio-debugging iis-express

5
推荐指数
1
解决办法
3346
查看次数

单步执行断点时出现编译错误

每当我遇到断点并尝试跨过它或进入它时,我就会开始遇到奇怪的错误。

我收到消息:

进行了无法编译的编辑。在修复编译错误之前,无法继续执行。

错误图片

这些项目编译得很好,当我没有遇到任何断点时,这种情况就不会发生。我使用的是 Visual Studio 2019 16.3.1,这种情况发生在我的所有解决方案中,而不仅仅是一个。我已经尝试过以下方法,但没有任何效果:

  • 清除我的 .vs 文件夹
  • 重新启动 Visual Studio
  • 重新启动计算机
  • 清洁重建
  • 删除所有断点并再次添加它们
  • 所有建议的答案都在这里,但没有一个有效。
  • 升级到16.3.2
  • 修复 Visual Studio

我还可以尝试什么?

更新:我遵循@HansPassant 的建议并禁用了“编辑并继续”,这解决了最紧迫的问题,但这似乎是一个棘手的解决方法。

.net c# visual-studio-debugging visual-studio-2019

5
推荐指数
1
解决办法
1307
查看次数

Visual Studio 调试器在调试中无法正确显示 std::string

当我暂停程序时,我和我的团队遇到了 Visual Studio 显示乱码而不是正确字符串内容的问题。里面的字符串数据是正确的,只是VS的调试器不知何故丢失了。

\n\n

我将正确的内容标记为绿色,错误的内容标记为红色。

\n\n

VS 16.3.4 中的 std::string 乱码问题

\n\n

你可以看到std::string定义为

\n\n
const std::string testStdString = "contents of std::string";\n
Run Code Online (Sandbox Code Playgroud)\n\n

显示为"\\b\xc3\x84\xc4\x8eD\\x19"调试悬停和监视窗口。但 C 弦.c_str()显示良好。写入的控制台cout也显示正常。\n这个损坏的值在每次运行时都会发生变化。

\n\n

在原始视图模式下,您可以看到指针内容显示为 ASCII 时,看起来就像调试器认为的字符串内容。那么也许有一些短字符串优化相关的问题?

\n\n

字符串的原始视图

\n\n

如果将其解码为字符串:

\n\n
"\\b\xc3\x84\xc4\x8eD\\x19"\n    [0x00000000]: 0x08 \'\\b\'\n    [0x00000001]: 0xc4 \'\xc3\x84\'\n    [0x00000002]: 0xcf \'\xc4\x8e\'\n    [0x00000003]: 0x44 \'D\'\n    [0x00000004]: 0x19 \'\\x19\'\n    [0x00000005]: 0x00 \'\\0\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

buf与原始视图中可见的属性匹配:(0x0000001944cfc408相反顺序)。

\n\n

问题仅影响std::stringstd::wstringC 字符串工作正常。当我尝试使用std::string::c_str()它时效果也很好。

\n\n

当我尝试使用一个简单的新项目时,不会出现此问题 - 但在我们使用本机 C++ 和 C# UWP 解决方案的 …

c++ stdstring visual-studio-debugging visual-studio-2019

5
推荐指数
1
解决办法
2563
查看次数

在 Visual Studio 2017 中的 launchSettings.json 中手动定义端口

当我为 Visual Studio 创建新项目时,只需复制现有项目并修改项目/解决方案/配置文件,而不是剪切并粘贴一大堆文件,然后必须设置生成操作,这要省力得多对于每个。

除了IIS 调试设置 之外,此方法运行良好。

如果我让它们保持不变,那么我一次只能调试一个项目,因为该端口将被使用。

但是,如果我更改 launchSettings.json 中的端口(我使用的是 Asp Net Core,因此 Kestrel 有一个端口,并且还有一个 SSL 端口),则没有任何效果。我现在处于这种情况,复制了一个项目并将两个端口号更改为新的随机端口,并且在相关项目中,当从菜单中选择“启动而不调试”时,我什至没有启动网络服务器(虽然我确实有一个浏览器)。

在 VS 创建的项目中,我至少得到了一个由“ASP NET Core Web Server”启动的新输出窗口,其中包含 Kestrel 输出。

我知道 VS 可能需要做一些事情,比如注册一个自签名的 SSL 证书,也许还需要修改 IIS Express 安装文件,但如果能够自己做这些事情那就太好了。

我尝试删除解决方案.vs文件夹并查看 WindowsDocuments文件夹中的 IIS Express 文件夹(其中似乎没有任何项目/解决方案特定的内容)。

这是launchSettings.json(我所做的就是更改端口号和项目配置文件名称,例如 My_AspMvc)

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost: 62649/",
      "sslPort": 44315
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "https://localhost: 44315/",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": …
Run Code Online (Sandbox Code Playgroud)

visual-studio visual-studio-debugging iis-express asp.net-core

5
推荐指数
1
解决办法
6984
查看次数

Visual Studio 2019 调试时冻结

我有一个奇怪的问题。调试 C# Windows 应用程序时(但只有一个应用程序,其他都很好),Visual Studio 冻结(通常在插入断点时)。重新启动电脑、重置 VS 设置、更新 VS、清理 .vs 目录、关闭防病毒软件 - 都没有帮助。从控制台运行时 - 应用程序中一切正常。但尝试附加调试器 - 同样的问题......我没有更多的想法......

c# freeze visual-studio visual-studio-debugging

5
推荐指数
1
解决办法
9618
查看次数

从本机到托管转换后,Visual Studio 调试器值错误

一般说明

我在调试 Visual Studio 项目时遇到问题。该项目有一个大型的中心类“MachineControl”。它还将当前所处的状态存储为枚举类的值。在尝试修复不相关的错误时,我设置了一些条件断点来解决它。经过一些令人困惑的情况后,我意识到从调试器获得的信息是错误的。代码运行时的值与调试器显示的值不同。

mState 在鼠标悬停时显示错误值

这个值是错误的,因为当我单步执行代码时,它实际上表现得好像处于 StateEnum::Running(1) 状态。

IDE 和代码信息

在与调试器相关的所有内容中发现错误信息:

  • 通过调试器鼠标悬停显示
  • 用于条件断点
  • 汽车
  • 当地人
  • 手表
  • 《即时之窗》
  • 内存视图

正确信息:

  • std::cout
  • 代码行为
  • 记录

环境:

  • 微软 Visual Studio 专业版 2019,16.9.0

代码:

  • MachineControl 类中的单线程本机代码
  • 托管 C++ GUI 项目围绕本机 C++ 静态库调用托管模拟包装器 DLL(这解释了后面提到的“托管到本机”转换)

代码示例

错误的调试信息发生在难以隔离的点。可悲的是,我无法生成一个最小的可重复示例。以下代码片段是我必须显示问题发生的一般情况的最简单的说明性代码:

class MachineControl : public EventReceiver <Evt>
{
    StateEnum mState;
public:
    void onEventReceived(const Evt& evt) override;
    void processPeriodicTimer();
    //...
};

void MachineControl::onEventReceived(const Evt& event) // called by other class through managed to native transition
{
    switch (mState) // shows wrong information …
Run Code Online (Sandbox Code Playgroud)

c++ debugging c++-cli visual-studio visual-studio-debugging

5
推荐指数
0
解决办法
454
查看次数

Angular 11:如何调试html内的变量?

用例

我想调试 Angular 11 Web 应用程序的 html 代码中的变量。

我设法获取ctx.ngForOf变量,但这是我所能做的。

我的程序中缺少某些内容,但我找不到缺少的内容。

感谢您花时间回答这个问题

工具

我在用

  • Visual Studio Code vscode
  • 角11

我尝试了什么?

  • 我发现ctx包含的变量ngForOf包含从 Web 服务检索的数据(20 项)。

ctx.ngForOf

    { 
        "adult": false,
        "backdrop_path": "/pcDc2WJAYGJTTvRSEIpRZwM3Ola.jpg",
        "genre_ids": [
            28,
            12,
            14,
            878
        ],
        "id": 791373,
        "original_language": "en",
        "original_title": "Zack Snyder's Justice League",
        "overview": "Determined to ensure Superman's ultimate sacrifice was not in vain, Bruce Wayne aligns forces with Diana Prince with plans to recruit a team of metahumans to protect the …
Run Code Online (Sandbox Code Playgroud)

visual-studio-debugging angular chrome-debugging

5
推荐指数
2
解决办法
7422
查看次数

可以在调试版本中关闭 NRVO 吗?

在程序中如下

\n
#include <iostream>\n\nstruct A \n{ \n    A() { std::cout << "0"; }\n    A( const A & ) { std::cout << "1"; }\n    A( A && ) noexcept { std::cout << "2"; }\n};\n\nA foo()\n{\n    A res;\n    return res;\n}\n \nint main()\n{\n    const A a = foo();\n    (void)a;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我预计命名返回值优化发生在 foo() 中,因此复制或移动构造函数都不会被调用。事实上,gcc 和 clang 打印 \xe2\x80\x9c0\xe2\x80\x9d。

\n

但调试配置中的 Visual Studio 2019 打印 \xe2\x80\x9c02\xe2\x80\x9d。是否允许编译器在调试版本中避免 NRVO?

\n

c++ visual-studio visual-studio-debugging nrvo

5
推荐指数
1
解决办法
143
查看次数