3

ランダムな間隔で 1 日に数回起動され、一度に複数のインスタンスを実行する特定のアプリケーションの初回例外のダンプを生成したいと考えています。

私は何を試しましたか

Procdump

procdump を使用するには、PID を知るか、プロセスが起動するのを待つ必要があります。複数のインスタンスが起動されるため、起動されたすべてのインスタンスの監視を開始するには機能しません。

gflags

gflags を使用すると、デバッガーをアタッチできますが、各プロセスを手動で続行したくなく、プロセスを自動化する方法がわかりません。gflags で procdump をデバッガとして使用しようとしましたが、プロセスを procdump に渡す方法がわかりません。

4

2 に答える 2

3

同じexeの複数のインスタンスのpidを列挙する単純なpowershellスクリプトを作成し、以下のように例外が発生したときにダンプしました

脚本

$b=($a= Get-Process fkiss).count
0..($b-1)|%{$c = ("-e 1 -n 10 {0}" -f $a[$_].Id);Start-Process procdump $c}  

このコードを2回コンパイルしてダブルクリックしました

#include <stdio.h>
#include <windows.h>
void main (void){
    int i=0,a=2,b=0;
    while (i < 20) {
    __try {
        Sleep(6000);
        printf("%d\n",a/b);
    }__except(EXCEPTION_EXECUTE_HANDLER) {
        b=2;
        printf("%d\n",a/b);
        Sleep(6000);
    }
    i++;
    b=0;
    }
}

ディレクトリに20個のダンプを取得しました

powershell -c (get-childitem *.dmp).count
20

そして、それらは使用する両方のインスタンスを反映します

for %I in (dir *.dmp) do dumpchk %I | grep -i "-e 1 -n "

出力

>dumpchk fkiss.exe_160126_045712.dmp   | grep -i "-e 1 -n "
Loading dump file fkiss.exe_160126_045712.dmp
*** "E:\sysint\procdump.exe" -e 1 -n 10 3084
*** "E:\sysint\procdump.exe" -e 1 -n 10 3084

>dumpchk fkiss.exe_160126_045714.dmp   | grep -i "-e 1 -n "
Loading dump file fkiss.exe_160126_045714.dmp
*** "E:\sysint\procdump.exe" -e 1 -n 10 3108
*** "E:\sysint\procdump.exe" -e 1 -n 10 3108

>dumpchk fkiss.exe_160126_045724.dmp   | grep -i "-e 1 -n "
Loading dump file fkiss.exe_160126_045724.dmp
*** "E:\sysint\procdump.exe" -e 1 -n 10 3084
*** "E:\sysint\procdump.exe" -e 1 -n 10 3084
于 2016-01-25T23:36:22.050 に答える