gpt4 book ai didi

windows - 我可以从 Windows 上的 ghc Haskell 进程转储中收集哪些信息?

转载 作者:可可西里 更新时间:2023-11-01 09:27:48 25 4
gpt4 key购买 nike

我的命令行应用程序的一位用户报告说出现了一个无限循环。当进程处于这种状态时,他们很有帮助地转储了进程(通过任务管理器)并将其发送给我。

我不确定如何从这个转储中获取有用的信息。我的 windbg -z the-dump-file.dmp -y releases\v5.0.0 -i releases\v5.0.0 的常规技术没有提供太多我知道如何解释的信息。我可以改用特定于 ghc 的工具吗?

下一步,我应该在发布过程中添加构建选项还是我应该做的其他事情,以使这种事后调试更有成效?

这是我看到的堆栈示例。没有太多有用的信息,特别是对于习惯在 WinDbg 中调试 C/C++ 代码的人来说。 :-)

   0  Id: 112dc.cc18 Suspend: 1 Teb: 00000000`00341000 Unfrozen
*** ERROR: Module load completed but symbols could not be loaded for gbc.exe
# Child-SP RetAddr Call Site
00 00000000`01b7d8d0 00000000`01049f71 gbc+0xc5676e
01 00000000`01b7d930 00000000`0104b5b4 gbc+0xc49f71
02 00000000`01b7d9a0 00000000`0104c644 gbc+0xc4b5b4
03 00000000`01b7da60 00000000`0104c1fa gbc+0xc4c644
04 00000000`01b7dab0 00000000`0042545b gbc+0xc4c1fa
05 00000000`01b7db30 00000000`011c40a0 gbc+0x2545b
06 00000000`01b7db38 00000000`0535bee1 gbc+0xdc40a0
07 00000000`01b7db40 00000000`010ffd80 0x535bee1
08 00000000`01b7db48 00000000`0535bee1 gbc+0xcffd80
09 00000000`01b7db50 00007ffb`3581fb01 0x535bee1
0a 00000000`01b7db58 00007ffb`3581b850 imm32!?MSCTF_NULL_THUNK_DATA_DLB+0x2e9
0b 00000000`01b7db60 00000000`00000010 imm32!CtfImmGetCompatibleKeyboardLayout
0c 00000000`01b7db68 00000000`00000000 0x10

1 Id: 112dc.d324 Suspend: 1 Teb: 00000000`00349000 Unfrozen
# Child-SP RetAddr Call Site
00 00000000`05c2fc48 00007ffb`36441563 ntdll!ZwWaitForWorkViaWorkerFactory+0x14
01 00000000`05c2fc50 00007ffb`34172774 ntdll!TppWorkerThread+0x293
02 00000000`05c2ff60 00007ffb`36470d61 kernel32!BaseThreadInitThunk+0x14
03 00000000`05c2ff90 00000000`00000000 ntdll!RtlUserThreadStart+0x21

2 Id: 112dc.11b48 Suspend: 1 Teb: 00000000`0034b000 Unfrozen
# Child-SP RetAddr Call Site
00 00000000`0642dd38 00007ffb`32f2988f ntdll!ZwWaitForSingleObject+0x14
01 00000000`0642dd40 00000000`00ffca15 KERNELBASE!WaitForSingleObjectEx+0x9f
02 00000000`0642dde0 00000000`00000000 gbc+0xbfca15

最佳答案

一些可能有用的资源。 (如果有更多最新的,我想自己看看。)

一些重要的金 block :

运行时标志 +RTS -? 会告诉你哪些运行时标志添加了调试信息。这些将以 +RTS -D 开头。例如,+RTS -DS 开启了一些运行时断言和健全性检查。

你看到的奇怪名字是用一种叫做 Z 编码的东西编码的。这是在 https://ghc.haskell.org/trac/ghc/browser/ghc/compiler/cmm/CLabel.hs 处定义的.

如果您可以在打开调试符号并关闭线程的情况下重新编译代码,并且仍然重现错误,则可以在调试器中设置断点(或点击 control-C)并从那里进行回溯。您可以使用 print/a 0x006eb0c0 之类的命令检查内存(尽管您似乎使用的是 64 位指针)。您可以看到因 disassemble 而崩溃的汇编语言指令。

您需要使用-ddump-stg 编译标志来查看变量名的含义,因为那是程序组装前转换的最后阶段,您看到的变量名在调试器中对应于此处的那些。

您可以使用 Debug.Trace 检测代码。

关于windows - 我可以从 Windows 上的 ghc Haskell 进程转储中收集哪些信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44080298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com