草庐IT

java - 分析java进程的线程转储

我有一个基于JavaEE的应用程序在tomcat上运行,我发现该应用程序在运行几个小时后突然挂起。我从应用程序挂起前收集了线程转储,并将其放入TDA进行分析:TDA(线程转储分析器)为上述监视器提供以下消息:Alotofthreadsarewaitingforthismonitortobecomeavailableagain.Thismightindicateacongestion.Youalsoshouldanalyzeotherlocksblockedbythreadswaitingforthismonitorastheremightbemuchmorethreadswaiting

c++ - 为什么 STL 在查找时会映射核心转储?

所以,在这种情况下,我需要查看一个对象是否在我的STL映射中。如果不是,我将添加它。charsymbolName[]={'H','e','l','l','o','\0'};maptheMap;if(theMap.find(symbolName)==theMap.end()){TheObjecttheObject(symbolName);theMap.insert(pair(symbolName,theObject));}当对象不在map中时,我在theMap.find上获取核心转储。据推测,如果该项目不在map中,它应该返回一个迭代器,相当于map::end这是怎么回事?海湾合作委员会

c++ - 获取启动时崩溃的进程的转储

在我无法访问的客户机器(WinXPSP2)上,我有一个Win32EXE(非托管C++)在启动时崩溃。我想解决此问题的最佳方法是获取(小型)转储并稍后使用windbg或类似工具对其进行分析。现在,我通常会告诉客户安装Windows调试工具并运行cscriptadplus.vbs-crash但是,您似乎无法将adplus用于在启动时崩溃的应用程序(http://support.microsoft.com/kb/q286350/表示“在以下情况下请勿使用ADPlus:如果您必须对在启动期间意外退出的程序或进程进行故障排除”).同一篇文章说“使用UserModeProcessDump”,但我没

c++ - gdb 调试远程核心转储

我有一个用C++编写的服务器在我无法直接访问的生产环境中崩溃。崩溃产生了一个巨大的核心转储~34G,我无法在本地复制。我需要分析核心转储但不知道如何在不复制它的情况下完成。我尝试在目标上运行gdbserver但它没有将核心文件作为参数并且似乎只适用于调试从主机运行的远程应用程序。有办法做到这一点吗? 最佳答案 Ineedtoanalyzethecoredumpbutdon'tknowhowitcanbedonewithoutcopyingitover.你不能。您需要将核心转储放到可以运行GDB的位置。Icannotsshtother

c++ - 如何在 WinDbg 扩展中基于转储文件内存创建对象?

我处理大型应用程序,经常使用WinDbg根据客户的DMP文件诊断问题。我已经为WinDbg编写了一些小的扩展,这些扩展被证明对于从DMP文件中提取信息位非常有用。在我的扩展代码中,我发现自己以相同的方式一遍又一遍地手动取消引用c++类对象。例如:Address=GetExpression("somemodule!somesymbol");ReadMemory(Address,&addressOfPtr,sizeof(addressOfPtr),&cb);//gettheactualaddressReadMemory(addressOfObj,&addressOfObj,sizeof(a

c++ - 从核心转储中获取正在使用的内存

我有一个由C++程序生成的核心转储文件。我怀疑它崩溃的原因是内存不足。有没有办法使用gdb(或任何其他方式)从核心文件中获取正在使用的内存量? 最佳答案 根据thisthread,itisnotpossible.但是,您可以使用size-Acore来获取核心转储的各个部分的大小(尽管您不知道它们是什么)。 关于c++-从核心转储中获取正在使用的内存,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/qu

c++ - 是否可以转储核心但不退出进程?

我希望能够生成核心转储但之后不退出进程。我不需要它来继续执行,只是不要死。这是一个C++Ubuntu进程。我相信我正在以一种非常标准的方式转储核心:我通过使用signal()设置信号处理程序来捕获有问题的信号,我通过setrlimit()设置核心大小限制,然后我提示核心转储signal()和raise():signal(SIGSEGV,OnPosixSignal);...voidOnPosixSignal(intiSignal){structrlimitCoreLimit;CoreLimit.rlim_cur=RLIM_INFINITY;CoreLimit.rlim_max=RLIM_

c++ - 虚拟内存和核心转储之间的关系

我有一个可执行文件和一个gcore。我用gcore创建了核心转储文件。现在,我想将可执行文件的虚拟地址映射到核心转储。我知道核心转储是可执行文件的内存转储,如果我想从核心转储中分析虚拟地址。我可以假设虚拟地址0x0000等于核心转储的偏移量0x0000吗? 最佳答案 Iknowthatthecoredumpisamemorydumpofanexecutablefile,没有。gdb中的核心转储(gcore表示您正在使用它)通常采用ELF格式,因此有一个扩展的header定义什么映射到什么。我不太确定在转储内核时GDB/linux对地

c++ - 如何创建另一个进程内存的二进制/十六进制转储?

我找不到将另一个进程的内存转储到文件的合理方法。经过大量搜索,我在CodeProject上找到了一篇不错的文章,它具有我想要的*大部分*功能:Performingahexdumpofanotherprocess'smemory.这很好地解决了权限问题并奠定了良好的基础。但是,使用此实用程序,我发现即使是一个小进程,如干净的Notepad.exe或Calc.exe实例,也可以生成大小超过24MB的转储文件,而进程本身在内存中运行不到20KB根据TaskManager。这篇文章让我相信,也许它也在共享内存中转储东西,可能是DLL空间等。例如,Calc.exe的转储将包括包含来自Kernel

c++ - 如何在小型转储中更改模块的校验和?

我编写(和销售)的软件在分发之前经过压缩和加密。每次我发布新版本时,我都会在压缩和加密之前保留所有.map文件和生成的二进制文件,包括exe。当它在客户端机器上崩溃时,我得到一个小型转储。我在VisualStudio中打开这些小型转储并在那里探索它们。我通过在.map文件中搜索地址充分利用了这些小型转储。这通常会让我进入代码的正确区域,我通常可以推断出崩溃发生的原因并修复它,但这非常耗时。如果我可以在调试小型转储时使用从原始构建中保存的符号,那将会很有帮助。我的问题是我收到有关无法找到正确符号的警告。我的研究使我相信这是因为客户端计算机上的exe校验和与VisualStudio构建的e