我已经建立了我公司的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:>