问题标签 [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.
.net - .NET 生产调试
我已经在生产中使用了一段时间的 Windows 应用程序,并将其设置为在引发异常时向我们发送错误报告。其中大部分都具有相当的描述性,可以帮助我很快找到问题(我使用 MS 应用程序异常块)。
在某些情况下,我的报告是我无法重现的问题,并且似乎只发生在少数客户端计算机上。
我没有对这些客户端计算机的物理访问权限,我可以使用哪些策略进行调试?在代码中构建一些跟踪会更好,还是有其他替代方案?
谢谢你。
编辑:我应该更清楚:我得到的错误报告确实有堆栈跟踪,但由于它是生产代码,它并没有指出导致异常的确切行,只是它被抛出的方法。
debugging - 启动 windbg 用户模式远程调试会话的最佳技术
您最喜欢启动 windbg 用户模式远程调试会话的技术是什么?为什么你更喜欢这种技术而不是其他技术?(优点缺点)
至少有四种不同的方法可以使用 windbg 进行用户模式远程调试,如 windows 帮助文件的调试工具的“远程调试”部分所述。
- 在目标上运行应用程序,然后从主机 windbg 附加到它
- 让主机 windbg 使用 remote.exe 在目标上启动应用程序
- 让“智能客户端”主机 windbg 通过在目标上运行的进程服务器在目标上启动应用程序
- 使用选项“-server”在目标机器上运行windbg实例以自动启动服务器,然后从第二台机器连接到服务器。
c - C的内存泄漏检测器?
人们对哪些内存泄漏检测器有很好的体验?
以下是迄今为止的答案摘要:
Valgrind - 用于构建动态分析工具的仪器框架。
Electric Fence - 与 GDB 一起使用的工具
Splint - 注释辅助的轻量级静态检查
Glow Code - 这是一个完整的实时性能和内存分析器,适用于使用 C++、C# 或任何 .NET Framework 开发应用程序的 Windows 和 .NET 程序员
另请参阅此stackoverflow 帖子。
c# - 获取 IIS 工作进程崩溃转储
我在我的 ASP.NET 应用程序中做错了事。它可能是我正在使用的任意数量的 CTP 库,或者我只是没有正确处理某些东西。但是当我将我的 ASP.NET 重新部署到我的 Vista IIS7 安装或我的服务器的 IIS6 安装时,我会崩溃一个 IIS 工作进程。
我已将问题缩小到我的 HTTP 爬虫,它是一个多线程的野兽,它会在被要求时爬取网站以获取有用的信息。在我启动爬虫并重新部署应用程序后,而不是优雅地卸载 appDomain 并重新加载,IIS 工作进程将崩溃(弹出崩溃消息)并继续重新加载应用程序域。
发生此崩溃时,我在哪里可以找到崩溃转储进行分析?
debugging - 调试生成文件的工具
我有一个大型遗留代码库,其中包含非常复杂的生成文件,并且有很多变量。有时我需要更改它们,我发现很难弄清楚为什么更改没有按我预期的方式进行。我想找到的是一个工具,它基本上可以对“make”过程进行逐步调试,我会给它一个目录,我将能够在不同点看到不同变量的值过程。没有一个调试标志似乎向我展示了我想要的东西,尽管我可能遗漏了一些东西。有谁知道这样做的方法?
java - 我如何在 java 中将堆栈跟踪添加到我的调试打印输出中
从调试打印输出中打印堆栈跟踪的最简单方法是什么?通常在测试期间,您想知道导致引发调试消息的情况的调用堆栈。
c++ - 我可以在 System C(或 Plain Vanilla C++)的运行时设置数据断点吗?
我在 system-C 中有一个类,其中包含一些数据成员:
我在这样的构造中初始化它:
但是我第一次在我的代码中使用它时,那里有垃圾。
由于系统的构建方式,我无法轻松连接调试器。是否有任何方法可以在代码中设置数据断点,以便它告诉我变量在代码中实际更改的位置,但无需连接调试器?
编辑:@Prakash:实际上,这是问题中的错字,但在我的代码中没有……谢谢!
objective-c - 在gdb中调试Objective-C时向对象发送消息,没有符号
我正在尝试向 gdb 中的 Objective-C 对象发送消息。
我无法向它发送任何消息。我错过了什么吗?我真的需要符号或其他东西吗?
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 次崩溃,其中有两个常数。
让我们先不要讨论是谁做出了这种改变。我敢肯定罪魁祸首是想匿名...咳
c# - 如何附加调试器以从托管(C#)包装器进入本机(C++)代码?
我有一个从 C# 代码调用的 C++ 函数调用的包装器。如何在 Visual Studio 中附加调试器以单步执行本机 C++ 代码?
这是我拥有的调用 C++ 文件中定义的 GetData() 的包装器:
代码崩溃了,我想调查根本原因。
谢谢,尼基尔