私はtravis-ciで使用するC++プロジェクトを持っています。現在、boost.build を使用してビルドしています。travis で単体テストを実行するときgdb
は、クラッシュが発生した場合にバックトレースを取得できるように を使用しています。
これをgdb
非対話的に行うには、コマンドラインで次のように呼び出します。
gdb -return-child-result -batch -ex "run" -ex "thread apply all bt" -ex "quit" --args ./${file}
${file}
私の実行可能ファイルはどこにありますか。
これにより、次のように指示されます。
- プロセスを開始する
- すべてのスレッドに適用されます
bt
。これは、クラッシュが発生した場合にバックトレースを発行し、クラッシュが発生していない場合は何もしません。 - 最後に
gdb
終了し、子の終了コードで終了します。
今、私は appveor でも同じことをしたいと思います。
ブースト ビルドは、appveyor VM ですぐに使用できるように見えるので、脱帽です。
cdb
ただし、のコンソールのいとこであるを構成する方法を理解するのに苦労していますwindbg
。ビルドログにハングしているようです。私がオンラインで見つけた例のほとんどは、プロセスを開始して実行中にデバッグするのではなく、ミニダンプ ファイルの検査に関係しています。
私は現在cdb
、このように呼び出しています(appveyor powershellスクリプトから):
cdb -c "$$><cdb_script.txt" -o $file.fullName
そして、私のようにcdb_script.txt
見えます
.sympath srv*C:\Windows\Symbols*http://msdl.microsoft.com/download/symbols;
.reload;
~* k 99;
q
私は基本的に、私がグーグルで検索したさまざまなものからこれをまとめています。
- https://msdn.microsoft.com/en-us/library/windows/hardware/ff560096(v=vs.85).aspx
- http://www.sandboxie.com/index.php?HowToUseWinDbg
これを具体的に行う方法について、より良いドキュメントや例を見つけたいと本当に思っていました。
私が今得るエラーは次のとおりです。
Microsoft (R) Windows Debugger Version 6.2.9200.20512 X86
Copyright (c) Microsoft Corporation. All rights reserved.
CommandLine: C:\projects\primer\test\stage\api.exe
Symbol search path is: *** Invalid ***
****************************************************************************
* Symbol loading may be unreliable without a symbol search path. *
* Use .symfix to have the debugger choose a symbol path. *
* After setting your symbol path, use .reload to refresh symbol locations. *
****************************************************************************
Executable search path is:
ModLoad: 009a0000 00a27000 api.exe
ModLoad: 76fb0000 7711f000 ntdll.dll
ModLoad: 76520000 76660000 C:\windows\SysWOW64\KERNEL32.DLL
ModLoad: 75fb0000 76087000 C:\windows\SysWOW64\KERNELBASE.dll
ModLoad: 74350000 743f0000 C:\windows\SysWOW64\apphelp.dll
SHIMVIEW: ShimInfo(Complete)
ModLoad: 73b20000 73bd9000 C:\windows\SysWOW64\MSVCP140D.dll
ModLoad: 741b0000 741cc000 C:\windows\SysWOW64\VCRUNTIME140D.dll
ModLoad: 71bd0000 71d46000 C:\windows\SysWOW64\ucrtbased.dll
(294.49c): Break instruction exception - code 80000003 (first chance)
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ntdll.dll -
eax=00000000 ebx=00000000 ecx=19a00000 edx=00000000 esi=7ecdf000 edi=00000000
eip=77063c7d esp=0110f8d4 ebp=0110f900 iopl=0 nv up ei pl zr na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246
ntdll!LdrInitShimEngineDynamic+0x6dd:
77063c7d cc int 3
0:000> cdb: Reading initial command '><cdb_script.txt'
^ Syntax error in '><cdb_script.txt'
私が試したいくつかのバリエーション:
$$<cdb_script.txt
の代わりに使用し$$><cdb_script.txt
ます。- スクリプト ファイルの最後のコマンドの後にセミコロンを置く
編集:この回答も見つかりました。これは、ミニダンプでそれを行う方法を再度説明していますが、スクリプトファイルをより詳細に示しています。
ミニダンプが何なのかよくわからないので、-o
オプションの方が魅力的に聞こえます。少なくとも、gdb
. しかし、これがわからない場合は、ミニダンプでやろうとすることになるかもしれません。