Windows:在CI测试期间进行COREDUMP时打印stacktrace



我已经建立了我公司的GitLab-Ci连续集成系统的一部分。我们每晚在所有平台上运行构建和测试。在Linux和MacOS的崩溃过程中,我设法打印了StackTrace(分别使用GDB和LLDB(。我正在尝试为Windows做到这一点,但我还没有找到如何...

Coredump Generation

我首先试图启用Windows错误报告,如文档中所述。它可以与默认设置一起使用,但是我希望在可执行的目录中生成核心。

我尝试将"%cd%"放在dumpfolder键(键入reg_expand_sz,我检查过(,但它不起作用...我现在试图了解如何使用windbg生成核心,但我仍然不知道如何。

stacktrace显示

当Coredump在正确的文件夹中生成Coredump时,我需要弄清楚如何打印stacktrace ...您是否已经知道此命令(对我来说是必须的(?

PowerShell脚本或基本命令都可以。

编辑:

我可以很容易地在本地使用Windbg打印出生成的Coredump的堆栈。但是,由于某种原因,当作业被gitlab-ci触发时,未生成核心...即使通过有缺陷的程序启动了有缺陷的程序gitlab-ci?(如果我通过SSH启动它,它可以工作(

我怀疑在这种情况下%CD%是否有效。%CD%可能会扩展到正在读取注册表条目的过程的当前目录。这与您的可执行文件目录不同。

看看procdump。-x命令行选项可让您指定一个目录,以放置崩溃转储文件。

这对我有用:

..procdump.exe  -e -x . SimpleCppCrash.exe -arg1 -arg2 -arg3

我可以在崩溃转储中验证这一点:

0:000> !peb
[...]
CommandLine:  '"SimpleCppCrash.exe"  -arg1 -arg2 -arg3'
[...]

因此,可执行文件的参数通过了。

其余的已经由@blabb回答:使用cdb -c "<whatever>;q",如果您希望它持续使用-logo <logfile>选项。

仅使用WINDBG/CDB,这肯定是可能的,但我不建议这样做。如果需要更详细地检查异常,那么将崩溃转储文件仍然存在是很好的。

%cd%我认为会扩展到windbg启动的目录,而不是可执行文件所在的位置

,我认为您不能要求任何通用工具倾倒任意目录

用于使用windbg/cdb/kd创建转储,在windbg安装文件夹中查看adplus(read adplus.doc(

需要一个-O参数,但这是一个单一目录,而不是多个任意目录

无论如何,您设法在您选择的目录中创建了一个.dmp文件

打印呼叫堆栈仅通过将转储加载到windbg和上来完成kb命令

假设您不想查看所有可以在PowerShell中运行正则匹配的装载物,也许

F:>dir /s /b *.dmp
F:mydmp.dmp
F:>powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
PS F:> $foo = cdb -c "kb;q" -z .mydmp.dmp
PS F:> $pattern = "Reading(.*?)quit:"
PS F:> [regex]::Match($foo,$pattern)

Groups   : {0, 1}
Success  : True
Name     : 0
Captures : {0}
Index    : 1033
Length   : 761
Value    : Reading initial command 'kb;q' RetAddr           : Args to Child
                : Call Site 00007fff`46466246 : 00000000`00000000 00007fff`464bd100 00007fff`464bd100 00007fff`464bd100 :
           ntdll!LdrpDoDebuggerBreak+0x30 00007fff`46453879 : 00000000`00000001 00000000`00000000 00000000`00000000
           00000000`00000001 : ntdll!LdrpInitializeProcess+0x1d92 00007fff`464056c3 : 00000000`00000000 00007fff`46390000
           00000000`00000000 00000041`08a21000 : ntdll!_LdrpInitialize+0x4e19d 00007fff`4640566e : 00000041`08cff780
           00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!LdrpInitialize+0x3b 00000000`00000000 :
           00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!LdrInitializeThunk+0xe quit:

PS F:> exit
F:>

相关内容

  • 没有找到相关文章

最新更新