我想捕获有时会停止响应几分钟的应用程序的堆栈跟踪。
当应用程序停止响应时,windows 桌面也停止响应鼠标点击,尽管此时其他一些已经运行的应用程序工作正常(例如 windbg 工作正常,ProcessExplorer 刷新其屏幕,但不响应鼠标事件). 虽然应用程序没有响应,但它实际上占用了一个 CPU 内核的大约 80%。这就是我想要获得堆栈跟踪的原因。
行为不端的应用程序通常需要大约 2-3 分钟才能完成其奇怪的工作,或者如果按下 Ctrl+Esc,它会立即响应(当然还会打开开始菜单...)
我将 WinDbg 附加到行为不当的应用程序,当我发出 Break 命令时,直到应用程序开始再次响应时才会发生入侵。
据我所知,入侵实际上创建了一个远程线程,它很快就会调用 DbgBreakPoint。
什么可能会阻止调试器的线程执行?
编辑: 首先感谢您的帮助!
我还认为这可能是由于设备驱动程序错误或在某处安装了系统范围的 Hook 引起的。
我正在考虑启用内核调试并从内核获取有问题线程的堆栈跟踪,或者启用手动蓝屏触发器以生成转储并在之后查看。
Process Explorer 和 Process Monitor 没有显示任何有趣的东西。当错误被触发时,它们也会变得不可用(更新它们的窗口但不响应鼠标或键盘)。
编辑 2: 背景资料: 应用程序使用 QT、OpenGL 和 DirectSound 并在 Windows 7 SP1 x64 上运行 我目前怀疑图形部分有问题。
奇怪的是,如果采用系统范围的锁定(如 GDI 锁定),这将阻止其他窗口的绘制,但事实并非如此。同一台机器上的 WinDbg 工作正常。 ProcessExplorer 更新但不接收鼠标点击,Desktop 更新但不接收鼠标点击。
我目前有一个内核调试器附加...
编辑3 ETW 对调试最有用。原来Qt的主事件处理循环疯了。 PeekMessage 和 MsgWaitForMultipleObjectsEx(超时为 0)在紧密循环中被调用。这就是高 CPU 使用率的来源。 看起来该应用程序当时正在生成/获取大量消息。但是要查看消息是什么并不容易(或者我不知道如何访问 ETW 中的函数参数)。使用调试器也无济于事,但 QT 事件循环中的断点让我相信 WM_TIMER 消息是罪魁祸首。
最佳答案
考虑到桌面在这段时间内也出现异常行为,听起来您的应用不一定存在异常行为,而只是加剧了其他地方的错误(例如,在设备驱动程序中或一些将自身注入(inject)其他进程的糟糕的反恶意软件代码).来自您的应用程序的堆栈跟踪可能会或可能不会很有启发性。
如果问题很容易重现,我会在应用的“中间”某处设置一个断点,看看问题是在断点之前还是之后发生。然后移动断点,直到您找到您的应用在事情变得疯狂之前执行的最后一条指令。弄清楚您的应用执行了哪些操作会触发此行为可能会提供线索,了解正在发生的事情。
另一种选择是尝试使用一些系统范围的调试工具。首先,我会在事件查看器中查看是否有可疑的错误或警告事件在机器出现故障时发布。然后我会尝试使用像 Sysinternal 的 Process Monitor 或 Process Explorer 这样的工具来更好地了解正在发生的事情。您还可以尝试使用 ETW 来捕获系统范围内发生的事件的跟踪信息,您可以在事后研究这些信息。 (ETW 可能很难使用,因此请查看 Bruce Dawson 的 UIforETW。)
关于windows - Windbg 磨合需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41968842/
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/
我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Rubysyntaxquestion:Rational(a,b)andRational.new!(a,b)我正在阅读ruby镐书,我对创建有理数的语法感到困惑。Rational(3,4)*Rational(1,2)产生=>3/8为什么Rational不需要new方法(我还注意到例如我可以在没有new方法的情况下创建字符串)?
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
我需要用任何语言编写一个算法,根据3个因素对数组进行排序。我以度假村为例(如Hipmunk)。假设我想去度假。我想要最便宜的地方、最好的评论和最多的景点。但是,显然我找不到在所有3个中都排名第一的方法。Example(assumingthereare20importantattractions):ResortA:$150/night...98/100infavorablereviews...18of20attractionsResortB:$99/night...85/100infavorablereviews...12of20attractionsResortC:$120/night
修改(澄清问题)我已经花了几天时间试图弄清楚如何从Facebook游戏中抓取特定信息;但是,我遇到了一堵又一堵砖墙。据我所知,主要问题如下。我可以使用Chrome的检查元素工具手动查找我需要的html-它似乎位于iframe中。但是,当我尝试抓取该iframe时,它是空的(属性除外):如果我使用浏览器的“查看页面源代码”工具,这与我看到的输出相同。我不明白为什么我看不到iframe中的数据。答案不是它是由AJAX之后添加的。(我知道这既是因为“查看页面源代码”可以读取Ajax添加的数据,也是因为我有b/c我一直等到我可以看到数据页面之后才抓取它,但它仍然不存在)。发生这种情况是因为