diff --git a/centipede/centipede_interface.cc b/centipede/centipede_interface.cc
index 9031169..c47d3a9 100644
--- a/centipede/centipede_interface.cc
+++ b/centipede/centipede_interface.cc
@@ -659,6 +659,7 @@
 
 int ListCrashIds(const Environment& env,
                  const fuzztest::internal::Configuration& target_config) {
+  fprintf(stderr, "[DEBUG_CENTIPEDE] ListCrashIds called!\n");
   FUZZTEST_CHECK(!env.list_crash_ids_file.empty())
       << "Need list_crash_ids_file to be set for listing crash IDs";
   FUZZTEST_CHECK_EQ(target_config.fuzz_tests_in_current_shard.size(), 1);
@@ -668,12 +669,22 @@
                          target_config.binary_identifier /
                          target_config.fuzz_tests_in_current_shard[0] /
                          "crashing";
+  fprintf(stderr, "[DEBUG_CENTIPEDE] crash_dir: '%s'\n", crash_dir.c_str());
+  fprintf(stderr, "[DEBUG_CENTIPEDE] RemotePathExists(crash_dir): %d\n",
+          RemotePathExists(crash_dir.string()));
   if (RemotePathExists(crash_dir.string())) {
+    fprintf(stderr, "[DEBUG_CENTIPEDE] RemotePathIsDirectory(crash_dir): %d\n",
+            RemotePathIsDirectory(crash_dir.string()));
     FUZZTEST_CHECK(RemotePathIsDirectory(crash_dir.string()))
         << "Crash dir " << crash_dir << " in the corpus database "
         << target_config.corpus_database << " is not a directory";
     crash_paths =
         ValueOrDie(RemoteListFiles(crash_dir.string(), /*recursively=*/false));
+    fprintf(stderr, "[DEBUG_CENTIPEDE] RemoteListFiles found %zu paths\n",
+            crash_paths.size());
+    for (const auto& path : crash_paths) {
+      fprintf(stderr, "  [DEBUG_CENTIPEDE] path: '%s'\n", path.c_str());
+    }
   }
   std::vector<std::string> results;
   results.reserve(crash_paths.size());
@@ -681,6 +692,8 @@
     std::string crash_id = std::filesystem::path{crash_path}.filename();
     results.push_back(std::move(crash_id));
   }
+  fprintf(stderr, "[DEBUG_CENTIPEDE] writing %zu results to %s\n",
+          results.size(), env.list_crash_ids_file.c_str());
   FUZZTEST_CHECK_OK(RemoteFileSetContents(env.list_crash_ids_file,
                                           absl::StrJoin(results, "\n")));
   return EXIT_SUCCESS;
diff --git a/fuzztest/internal/corpus_database.cc b/fuzztest/internal/corpus_database.cc
index d8221d1..67da20b 100644
--- a/fuzztest/internal/corpus_database.cc
+++ b/fuzztest/internal/corpus_database.cc
@@ -14,6 +14,7 @@
 
 #include "./fuzztest/internal/corpus_database.h"
 
+#include <cstdio>
 #include <string>
 #include <vector>
 
@@ -28,9 +29,23 @@
 std::vector<std::string> GetInputs(
     absl::string_view corpus_path_for_test_binary, absl::string_view test_name,
     absl::string_view subdir) {
-  if (corpus_path_for_test_binary.empty()) return {};
-  return ListDirectory(
-      absl::StrCat(corpus_path_for_test_binary, "/", test_name, "/", subdir));
+  if (corpus_path_for_test_binary.empty()) {
+    fprintf(
+        stderr,
+        "[DEBUG_CORPUS] GetInputs: corpus_path_for_test_binary is empty!\n");
+    return {};
+  }
+  std::string path =
+      absl::StrCat(corpus_path_for_test_binary, "/", test_name, "/", subdir);
+  fprintf(stderr, "[DEBUG_CORPUS] GetInputs: listing directory path: '%s'\n",
+          path.c_str());
+  auto results = ListDirectory(path);
+  fprintf(stderr, "[DEBUG_CORPUS] GetInputs: found %zu files in '%s'\n",
+          results.size(), path.c_str());
+  for (const auto& file : results) {
+    fprintf(stderr, "  [DEBUG_CORPUS] file: '%s'\n", file.c_str());
+  }
+  return results;
 }
 
 }  // namespace
diff --git a/fuzztest/internal/googletest_adaptor.cc b/fuzztest/internal/googletest_adaptor.cc
index d36d498..5698e89 100644
--- a/fuzztest/internal/googletest_adaptor.cc
+++ b/fuzztest/internal/googletest_adaptor.cc
@@ -71,20 +71,33 @@
       nullptr, test.file().c_str(), test.line(), std::move(fixture_factory));
 }
 
+#include <cstdio>
+
 template <typename T>
 void RegisterSeparateRegressionTestForEachCrashingInput(
     int* argc, char*** argv, FuzzTest& test,
     const Configuration& configuration) {
+  fprintf(stderr,
+          "[DEBUG_ADAPTOR] RegisterSeparateRegressionTestForEachCrashingInput "
+          "for test '%s'\n",
+          test.full_name().c_str());
+  fprintf(stderr, "[DEBUG_ADAPTOR] reproduce_findings_as_separate_tests: %d\n",
+          configuration.reproduce_findings_as_separate_tests);
   if (!configuration.reproduce_findings_as_separate_tests) return;
 #ifdef FUZZTEST_USE_CENTIPEDE
+  fprintf(stderr, "[DEBUG_ADAPTOR] FUZZTEST_USE_CENTIPEDE is defined\n");
   const std::vector<std::string> crash_inputs =
       ListCrashIdsUsingCentipede(configuration, test.full_name());
 #else
+  fprintf(stderr, "[DEBUG_ADAPTOR] FUZZTEST_USE_CENTIPEDE is NOT defined\n");
   CorpusDatabase corpus_database(configuration);
   const std::vector<std::string> crash_inputs =
       corpus_database.GetCrashingInputsIfAny(test.full_name());
 #endif
+  fprintf(stderr, "[DEBUG_ADAPTOR] found %zu crash inputs\n",
+          crash_inputs.size());
   for (const std::string& input : crash_inputs) {
+    fprintf(stderr, "  [DEBUG_ADAPTOR] crash input: '%s'\n", input.c_str());
     Configuration updated_configuration = configuration;
     updated_configuration.crashing_input_to_reproduce = input;
     RegisterFuzzTestAsGTest<T>(argc, argv, test, updated_configuration, input);
