问题标签 [debugging]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
1039 浏览

.net - .NET 生产调试

我已经在生产中使用了一段时间的 Windows 应用程序,并将其设置为在引发异常时向我们发送错误报告。其中大部分都具有相当的描述性,可以帮助我很快找到问题(我使用 MS 应用程序异常块)。

在某些情况下,我的报告是我无法重现的问题,并且似乎只发生在少数客户端计算机上。

我没有对这些客户端计算机的物理访问权限,我可以使用哪些策略进行调试?在代码中构建一些跟踪会更好,还是有其他替代方案?

谢谢你。

编辑:我应该更清楚:我得到的错误报告确实有堆栈跟踪,但由于它是生产代码,它并没有指出导致异常的确切行,只是它被抛出的方法。

0 投票
3 回答
5651 浏览

debugging - 启动 windbg 用户模式远程调试会话的最佳技术

您最喜欢启动 windbg 用户模式远程调试会话的技术是什么?为什么你更喜欢这种技术而不是其他技术?(优点缺点)

至少有四种不同的方法可以使用 windbg 进行用户模式远程调试,如 windows 帮助文件的调试工具的“远程调试”部分所述。

  1. 在目标上运行应用程序,然后从主机 windbg 附加到它
  2. 让主机 windbg 使用 remote.exe 在目标上启动应用程序
  3. 让“智能客户端”主机 windbg 通过在目标上运行的进程服务器在目标上启动应用程序
  4. 使用选项“-server”在目标机器上运行windbg实例以自动启动服务器,然后从第二台机器连接到服务器。
0 投票
17 回答
26267 浏览

c - C的内存泄漏检测器?

人们对哪些内存泄漏检测器有很好的体验?

以下是迄今为止的答案摘要:

Valgrind - 用于构建动态分析工具的仪器框架。

Electric Fence - 与 GDB 一起使用的工具

Splint - 注释辅助的轻量级静态检查

Glow Code - 这是一个完整的实时性能和内存分析器,适用于使用 C++、C# 或任何 .NET Framework 开发应用程序的 Windows 和 .NET 程序员

另请参阅此stackoverflow 帖子

0 投票
2 回答
15910 浏览

c# - 获取 IIS 工作进程崩溃转储

我在我的 ASP.NET 应用程序中做错了事。它可能是我正在使用的任意数量的 CTP 库,或者我只是没有正确处理某些东西。但是当我将我的 ASP.NET 重新部署到我的 Vista IIS7 安装或我的服务器的 IIS6 安装时,我会崩溃一个 IIS 工作进程。

我已将问题缩小到我的 HTTP 爬虫,它是一个多线程的野兽,它会在被要求时爬取网站以获取有用的信息。在我启动爬虫并重新部署应用程序后,而不是优雅地卸载 appDomain 并重新加载,IIS 工作进程将崩溃(弹出崩溃消息)并继续重新加载应用程序域。

发生此崩溃时,我在哪里可以找到崩溃转储进行分析?

0 投票
6 回答
65807 浏览

debugging - 调试生成文件的工具

我有一个大型遗留代码库,其中包含非常复杂的生成文件,并且有很多变量。有时我需要更改它们,我发现很难弄清楚为什么更改没有按我预期的方式进行。我想找到的是一个工具,它基本上可以对“make”过程进行逐步调试,我会给它一个目录,我将能够在不同点看到不同变量的值过程。没有一个调试标志似乎向我展示了我想要的东西,尽管我可能遗漏了一些东西。有谁知道这样做的方法?

0 投票
8 回答
15086 浏览

java - 我如何在 java 中将堆栈跟踪添加到我的调试打印输出中

从调试打印输出中打印堆栈跟踪的最简单方法是什么?通常在测试期间,您想知道导致引发调试消息的情况的调用堆栈。

0 投票
6 回答
1035 浏览

c++ - 我可以在 System C(或 Plain Vanilla C++)的运行时设置数据断点吗?

我在 system-C 中有一个类,其中包含一些数据成员:

我在这样的构造中初始化它:

但是我第一次在我的代码中使用它时,那里有垃圾。

由于系统的构建方式,我无法轻松连接调试器。是否有任何方法可以在代码中设置数据断点,以便它告诉我变量在代码中实际更改的位置,但无需连接调试器?

编辑:@Prakash:实际上,这是问题中的错字,但在我的代码中没有……谢谢!

0 投票
3 回答
3599 浏览

objective-c - 在gdb中调试Objective-C时向对象发送消息,没有符号

我正在尝试向 gdb 中的 Objective-C 对象发送消息。

我无法向它发送任何消息。我错过了什么吗?我真的需要符号或其他东西吗?

0 投票
2 回答
2427 浏览

visual-studio - 调试期间算术下溢或上溢异常

这是奇怪行为的一天。

我们有一个使用 Delphi 2007 制作的 Win32 项目,它承载 .NET 运行时并调用 .NET 以显示新表单,作为过渡期的一部分。

最近,我们开始在看似随机的位置和代码点遇到异常:算术上溢或下溢。

其中之一的堆栈跟踪如下所示:

在 Visual Studio 解决方案中,最外层的类库之一(即,它可以提取所有引用)已经设置了一个特定的调试程序,以 Delphi 项目输出为目标。这允许我们从 Visual Studio 调试 .NET 代码,即使程序的主要部分是用 Delphi 编写的。

该问题仅在从调试器运行时出现,而不是在我们直接运行 exe 文件时(通过资源管理器、快捷方式,甚至是Visual Studio 中的Ctrl+ )。F5

机器上显然没有间谍软件(如 this 暗示的那样

还有什么我们可以检查的吗?


编辑:看起来 .NET 调试器启用了这个 SNaN 标志,而 Delphi 调试器没有。我们将不得不对此进行进一步调查,但现在我将接受@Lorenzo Boccaccia的回答。

显然解决了

好的,看起来我们终于解决了这个问题。对于我们的测试人员来说,在没有附加调试器的情况下开始出现问题,因此我们必须优先考虑问题的优先级。

最后,我们发现了有问题的机器的一个常见问题,它们是配备 NVIDIA Quadro NVS 110M 的 Dell Lattitude D620 笔记本电脑,其系统映像中的旧驱动程序用于配置笔记本电脑,早在 2006 年。

我在网上找到了一篇帖子,虽然我在重新启动以更新显示驱动程序时丢失了 url,导致 .NET 服务崩溃,主要是当机器忙于在屏幕上做某事时。重现他的问题的一种方法是打开 C:\ 的命令提示符并执行 aDIR /S以强制进行大量屏幕更新,这将触发崩溃。

他也有一个 NVIDIA 视频卡。

我的机器上的问题大约每 2-4 次启动我们的程序就会出现,但在更新视频驱动程序后,我已经成功启动了 123 次,没有任何问题。(顺便说一句,我可以为这些事情推荐AutoHotKey )。

所以看起来我们找到了罪魁祸首,一个旧的/有缺陷的 NVIDIA 驱动程序。

更新了这个问题,以便将来有人可以节省一些时间。

现在,如果你能原谅我,我要去角落里哭。

被诅咒了!

我一定是把它搞砸了。在更新视频驱动程序后,我刚刚发布了上述更新,同事的笔记本电脑就出现了故障。

不过,我很肯定它现在是我们应用程序之外的一个问题,所以只需要弄清楚要更新哪些具体的东西。


进一步更新:好的,我的机器现在显然是固定的,我同事的机器不是这样。到目前为止,我们已经更新了 BIOS、芯片组驱动程序,目前 XP 的 SP3 即将推出。

今晚将进行老化测试,该应用程序将在夜间启动,因为问题在启动期间或第一次执行某些 WinForms .NET 代码时突然出现。这个应用程序主要是一个 Delphi Win32 应用程序,但它承载 .NET 运行时,问题似乎与 .NET 代码有关。当我们“启动”.NET 运行时,问题可能会出现,或者当我们从 Win32 触发第一个 .NET 窗口时,它也会出现。


从统计学上讲,我现在准备发布此代码。一夜之间,该应用程序已启动 3051 次而没有出现错误,而在我更新视频驱动程序之前,它每 2-4 次崩溃一次。

发现(!/?)

这种修复错误的折磨感觉就像去看医生,接下来会发生以下对话:

我已经刺激并戳了应用程序,最后我想我已经找到了我们所做的导致这个问题的事情。

在我们的应用程序中,我们托管来自 Delphi 2007 Win32 应用程序的 .NET 运行时,在我们的胶水代码中,我们有以下行(现在):

中间的两个常量原来只有一个 0,意思是选择默认值。这种变化是几个月前引入的,此后问题一直在慢慢蔓延到我们身上。引入此更改是为了鼓励 ANTS 分析器加载我们的 Win32 应用程序 + 托管的 .NET 运行时,以便进行性能分析,而我们当时引入的更改使这项工作发挥了作用。此外,算术上溢/下溢的问题正在慢慢变得更糟,所以我敢打赌,这个问题在更改后的一段时间内都没有出现,因此它与我们所做的任何更改都无关。

此外,由于我们仅(最初)在通过调试器运行时看到了问题,因此我们认为 Visual Studio 和/或 Delphi 有问题。

无论如何,现在从统计上看,在一个屏幕上的浏览器重复由 javascript 触发的上下滚动(显然需要触发错误),然后我已经能够成功启动应用程序 726 次,调用中的值为 0 ,并且它在 17 次中有 5 次崩溃,其中有两个常数。

让我们先不要讨论是谁做出了这种改变。我敢肯定罪魁祸首是想匿名...

0 投票
4 回答
15008 浏览

c# - 如何附加调试器以从托管(C#)包装器进入本机(C++)代码?

我有一个从 C# 代码调用的 C++ 函数调用的包装器。如何在 Visual Studio 中附加调试器以单步执行本机 C++ 代码?

这是我拥有的调用 C++ 文件中定义的 GetData() 的包装器:

代码崩溃了,我想调查根本原因。

谢谢,尼基尔