- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图让我的程序转储并在崩溃时保存它的堆栈跟踪。我用 _set_se_translator
安装了我自己的 win32 SE 处理程序,并尝试用 StackWalk64
转储堆栈跟踪,最后抛出一个 C++ 异常(它实际上在捕获时进行日志记录)。
代码如下所示:
...
_set_se_handlers(WIN32EXCEPTION::Win32ExceptionStuff);
...
void WIN32EXCEPTION::Win32ExceptionStuff(unsigned int Code, struct _EXCEPTION_POINTERS* Info) // static
{
STACKFRAME64 sf64;
sf64.AddrPC.Offset = Info->ContextRecord->Eip;
sf64.AddrStack.Offset = Info->ContextRecord->Esp;
sf64.AddrFrame.Offset = Info->ContextRecord->Ebp;
sf64.AddrPC.Mode= sf64.AddrStack.Mode= sf64.AddrFrame.Mode= AddrModeFlat;
while (StackWalk64(IMAGE_FILE_MACHINE_I386,GetCurrentProcess(),GetCurrentThread(),
&sf64,Info->ContextRecord,0,SymFunctionTableAccess64,SymGetModuleBase64,0))
{
//... Do something with the stack frames
}
throw WIN32EXCEPTION(/*...*/);
}
正如我在一些示例中看到的那样,但存在一个问题:StackWalk64 始终返回 true 并且 while
循环变得无限。 StackWalk64 仅重复同一帧。
问题是什么,如何解决?
最佳答案
这看起来与我得到的代码非常相似,而且确实有效。我能看到的唯一区别是我的代码使用 ZeroMemory() 在填充它的任何部分之前清除 STACKFRAME64 结构 - 这可能是必需的。
关于c++ - 为什么 StackWalk64 总是返回 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/545329/
你知道如何在delphi中读取另一个进程堆栈吗?? 最佳答案 是的。 您可以使用 Toolhelp 枚举线程功能;使用 GetThreadContext() 获取上下文;并使用 ReadProcess
快速总结 简而言之,我希望访问有关堆栈的调试信息,最好是将信息传递给 Logger。 我希望信息告诉我函数名、行号和文件名。 我有这些符号,我正在尝试访问其中的垃圾值并将它们转换为英语。但是似乎没有任
有没有人知道比“StackWalk”更好/更快的获取调用堆栈的方法?我还认为 stackwalk 在有很多变量的方法上也会变慢......(我想知道商业分析员是做什么的?)我在 Windows 上使用
我可以构建 google breakpad 客户端,stackwalker 可以将转储转换为人类可读的 txt 文件。但是没有制作vs2008解决方案的gyp文件。有谁知道如何在 Windows 上构
我可能做错了什么,但我无法弄清楚这一点。 我有一个简单的崩溃小型转储,在 Windows 上生成。 如果我在 Visual Studio 中打开转储,它会毫无问题地加载并显示崩溃线。 但是我无法在 m
我正在尝试使用 Java 9 的 Stackwalking API,并注意到收集的帧少于实际堆栈跟踪给出的帧。我想知道是否有可能获得相同数量的框架和元素? 看看下面的测试: @Test public
我正在尝试使用 Java 9 的 Stackwalking API,并注意到收集的帧少于实际堆栈跟踪给出的帧。我想知道是否有可能获得相同数量的框架和元素? 看看下面的测试: @Test public
这是一个错误吗?我至少期望出现异常而不是空字符串: jshell> ((Supplier)(()->StackWalker.getInstance(StackWalker.Option.RETAIN_
我习惯于使用 gprof 来分析我的 C 代码,但我想开始使用基于 GUI 的 Windows 应用程序,例如 Luke Stackwalker。 gprof 在我的二进制文件上工作得很好,但是 Lu
需要通过线程句柄打印 C++ 应用程序线程的调用堆栈,我求助于 StackWalker这在以前的 stackoverflow 答案中提到过。 然而,the StakWalker code日期为 200
Java9 的新 StackWalker 特性让我意识到,如果 Eclipse(最好是 IntelliJ)可以配置为使用自定义 StackWalker,它可以修改 IDE 调试器中的正常调用堆栈 Vi
我正在尝试在异常 block 中打印堆栈遍历器,但它仅显示当前类 public class Test1 { public void test() throws Exception{
我一直在探索 jdk9 中引入的 StackWalking API。使用或不使用选项 StackWalker.Option.SHOW_HIDDEN_FRAMES,我看不出输出有任何差异。 根据 API
我是一名优秀的程序员,十分优秀!