调试的最佳实践

2023-11-21

最近,我使用 Visual Studio 和 WinDbg 对托管应用程序进行了大量调试,因此我经常被要求协助同事进行调试。有好几次我发现人们只是到处插入断点并希望得到最好的结果。根据我的经验,这很少是一种有用的技术。

我的方法是这样的。

  • 重现问题。理想情况下,尽可能减少输入。

  • 检查出了什么问题并列出了错误可能出在哪里的理论。

  • 通过调试代码的特定区域一次检查一种理论。

根据需要重复步骤。

对于复杂的调试问题,我经常与同事合作。对于 WinDbg 这尤其有用。

还有其他有用的调试技巧或最佳实践吗?


如果我可以向大家提供一个有关调试的技巧,那就是再次打破它。

也就是说,当您认为已经找到修复并且系统似乎可以工作时。返回修复程序并查看系统是否再次崩溃。

有时,您可能会迷失在您尝试过的潜在解决方案的顺序中,并且在调试问题时会在系统的完全不同的区域中完成。然后你就会忘记你在原来工作的地方做了什么改变。

支持修复然后重现问题可确保候选修复不依赖于您在系统其他部分中更改的其他内容。您的修复补丁是一个正确的独立解决方案。

HTH.

cheers,

Rob

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调试的最佳实践 的相关文章

  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • 使用 Flutter Flavor 运行调试?

    我正在尝试在 Visual Studio 代码上为我的 flutter 应用程序运行调试模式 单击 运行和调试 但是当我这样做时 我面临以下问题 The Xcode project defines schemes release priva
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反

随机推荐

  • git:如何将分支的根移回两次提交

    假设我有 A B C D E F master G H new feature branch 现在我意识到实际上提交了 B 和 C 属于新功能 所以我想将它们移动到 新功能分支 换句话说 我希望 新功能分支 从 A 开始 并包含提交 B 和
  • 如何在 C/C++ 中处理 unicode 字符序列?

    在 C 和 C 中处理 unicode 字符序列的更便携和简洁的方法是什么 此外 如何 读取unicode字符串 将 unicode 字符串转换为 ASCII 以节省一些字节 如果用户仅输入 ASCII 打印unicode字符串 我也应该使
  • 如何同时从列表中删除多个索引? [复制]

    这个问题在这里已经有答案了 假设我这里有这个列表 list a b c d e f g 我如何删除说索引2 3 4 and 5同时 pop 不接受多个值 我还能怎么做呢 您需要在循环中执行此操作 没有内置操作可以一次删除多个索引 您的示例实
  • 如何在android中实现onMenuItemClickListener

    我如何实施onMenuItemClickListener Override public boolean onCreateOptionsMenu Menu menu super onCreateOptionsMenu menu getMen
  • 如何创建重复的日历事件?

    我正在使用 asp mvc 3 jquery full calendar ms sql server 2008 和 c 我想知道是否有人知道如何制作重复事件 我不确定如何制作它们 例如 在谷歌日历中 您可以每年重复一次约会 我怀疑他们在数据
  • C# 3.0:自动属性 ​​- 编译器创建的私有变量的名称是什么

    我在检查 NET 3 5的新特性 发现在C 3 0中 我们可以使用 public class Person public string FirstName get set public string LastName get set 代替
  • jQuery select2 控件 - 检索最后选择的元素

    我正在使用 jQuery select2 控件 我需要实现以下功能 如果用户尝试添加某个元素 基于某种算法 我应该从选择中删除另一个 不兼容的 元素 我看到有两种方法可以实现这一目标 1 禁止对所选值进行自动排序 2 获取最后选择的项目的值
  • 导轨回溯消音器不起作用,而过滤器起作用

    新的 Rails 4 2 设置 我想抑制长错误回溯 在下面的回溯日志中 第一行对我来说就足够了 接下来的 4 行可以删除 ActionController RoutingError No route matches GET user act
  • 参数“***”未绑定在指定的 LINQ to Entities 查询表达式中

    我在我的项目中做了一个常见的查询 我使用Expression来构建我的查询树 代码列表如下 public IList
  • 使用 ostream 打印到任何地方[重复]

    这个问题在这里已经有答案了 我想将数据发送到任何地方 我的意思是我不想在控制台或文件中打印数据 但我需要一些std ostream目的 怎么做 我用过 std ostream bitBucket 0 最近没有出现问题 尽管如果您从某个角度看
  • 如何在站点 B 上使用 nginx proxy_pass 提供内容时覆盖站点 A 的内容安全策略?

    当我在站点 B 上使用 nginx proxy pass 时 有没有办法覆盖域 站点 A 设置的内容安全策略 Site A defined Content Security Policy on their domain Site B act
  • 如何拍摄 Android 模拟器状态的快照?

    当我从以下位置启动 Android 模拟器时Android SDK 和 AVD 管理器我可以勾选这些框从快照启动 and 保存到快照以便在关闭模拟器时保存模拟器的状态 并在启动模拟器时再次恢复状态 这很棒 因为我不必在每次启动模拟器时都等待
  • $lookup 数组中的 ObjectId

    在 ObjectId 数组而不仅仅是单个 ObjectId 字段上执行 lookup 的语法是什么 订单文档示例 id ObjectId products ObjectId
  • 为什么 Visual Studio Code 中文件资源管理器中的子文件夹会折叠成一行?

    我对 VS Code 比较陌生 我想我一定是不小心更改了设置 VS Code 过去常常清晰地显示下面的所有子文件夹 并从其父文件夹向右缩进 但有些事情发生了变化 现在我的子文件夹显示有点像文件资源管理器中的面包屑 请参见下面发布的图片 我尝
  • 将包含日数据的 JFreeChart TimeSeries 系列转换为周或月数据?

    我意识到这可能是一个愚蠢的问题 并且我知道可以通过确定每个数据点所在的周或月等来完成 但是 我正在寻找一种避免编码的方法 如果它是在图书馆中完成的 大概所有的陷阱都得到了 我宁愿使用它 原始数据存储在Excel电子表格中 但我无法直接操作电
  • 输出原始图像流而不是 jpeg,动态调整图像大小

    我有一个 PHP 函数 可以动态调整图像大小以创建缩略图 我遇到了麻烦 因为它只是显示原始图像流而不是实际图像 我的代码使用一个名为缩略图的函数 thumbnail thumbnail item filename 209 137 image
  • PHP date('W') 与 MySQL YEARWEEK(now())

    有人可以解释一下为什么这两个给出不同的结果吗 我用 PHP 执行这个 date YW mktime 0 0 0 3 22 2013 outputs 201312 当我使用 MySQL 执行此操作时 SELECT YEARWEEK now o
  • HTMLUnit:执行速度超慢?

    我一直在使用 HTMLUnit 它非常适合我的要求 但似乎速度极其缓慢 例如 我使用 HTMLUnit 自动化了以下场景 Goto Google page Enter some text Click on the search button
  • Postgresql:带有转义换行符的 CSV 导出

    我使用此处发布的 所有 指令从 postgresql 数据库导出了一些数据 将 PostgreSQL 的 PL pgSQL 输出保存到 CSV 文件 但某些导出的字段包含换行符 换行符 因此我得到了一个 CSV 文件 如下所示 header
  • 调试的最佳实践

    最近 我使用 Visual Studio 和 WinDbg 对托管应用程序进行了大量调试 因此我经常被要求协助同事进行调试 有好几次我发现人们只是到处插入断点并希望得到最好的结果 根据我的经验 这很少是一种有用的技术 我的方法是这样的 重现