@Test
  public void testPluckingStacksFromGfshExport() throws Exception {
    Host host = Host.getHost(0);
    VM server1 = host.getVM(0);
    VM server2 = host.getVM(1);

    server1.invoke(() -> {
      getCache();
    });
    server2.invoke(() -> {
      getCache();
    });
    DistributedSystem system = getSystem();

    Set<DistributedMember> targetMembers = system.getAllOtherMembers();
    assertEquals("expected 3 members but found " + targetMembers, 3, targetMembers.size());

    String outputFileName = "PluckStacksdUnitTest.out";
    File outputFile = new File(outputFileName);
    if (outputFile.exists()) {
      outputFile.delete();
    }

    System.out.println("dumping stacks for " + targetMembers);
    dumpStacksToFile(targetMembers, outputFileName);
    assertTrue(outputFile.exists());
    assertNotEquals(0, outputFile.length());

    Map<String, List<PluckStacks.ThreadStack>> result = new PluckStacks()
        .getThreadDumps(new LineNumberReader(new FileReader(outputFile)), outputFileName);
    assertEquals(targetMembers.size(), result.size());
    for (List<PluckStacks.ThreadStack> dump : result.values()) {
      // there should be thread stacks in the list
      assertNotEquals(0, dump.size());
    }

    // if the test fails the file will be left behind for examination
    if (outputFile.exists()) {
      outputFile.delete();
    }
  }
Gfsh has an "export stack-traces" command that PluckStacks should be able to parse
geode-core/src/distributedTest/java/org/apache/geode/internal/util/PluckStacksDUnitTest.java