diff --git a/package_manager/src/Stage.php b/package_manager/src/Stage.php
index ced787368ca225332bc6e095d52f48583684d1ca..9d727e615567eb4b3f124b066a90888396f60f69 100644
--- a/package_manager/src/Stage.php
+++ b/package_manager/src/Stage.php
@@ -291,8 +291,8 @@ class Stage implements LoggerAwareInterface {
     try {
       $ignored_paths = $this->getIgnoredPaths();
     }
-    catch (\Exception $e) {
-      throw new StageException($e->getMessage());
+    catch (\Throwable $throwable) {
+      throw new StageException($throwable->getMessage(), $throwable->getCode(), $throwable);
     }
     $event = new PreCreateEvent($this, $ignored_paths);
     // If an error occurs and we won't be able to create the stage, mark it as
@@ -376,8 +376,8 @@ class Stage implements LoggerAwareInterface {
     try {
       $ignored_paths = $this->getIgnoredPaths();
     }
-    catch (\Exception $e) {
-      throw new StageException($e->getMessage());
+    catch (\Throwable $throwable) {
+      throw new StageException($throwable->getMessage(), $throwable->getCode(), $throwable);
     }
 
     // If an error occurs while dispatching the events, ensure that ::destroy()
diff --git a/package_manager/src/StatusCheckTrait.php b/package_manager/src/StatusCheckTrait.php
index 94f25d6754e6bf9522096a6f1b76be32a04258ed..e11dddabb2e9fef482ab9be1d09037ef64913476 100644
--- a/package_manager/src/StatusCheckTrait.php
+++ b/package_manager/src/StatusCheckTrait.php
@@ -36,9 +36,9 @@ trait StatusCheckTrait {
       $ignored_paths = new CollectIgnoredPathsEvent($stage);
       $event_dispatcher->dispatch($ignored_paths);
     }
-    catch (\Exception $e) {
+    catch (\Throwable $throwable) {
       // We can't dispatch the status check event without the ignored paths.
-      return [ValidationResult::createErrorFromThrowable($e, t("Unable to collect ignored paths, therefore can't perform status checks."))];
+      return [ValidationResult::createErrorFromThrowable($throwable, t("Unable to collect ignored paths, therefore can't perform status checks."))];
     }
 
     $event = new StatusCheckEvent($stage, $ignored_paths->getAll());
diff --git a/package_manager/src/Validator/ComposerSettingsValidator.php b/package_manager/src/Validator/ComposerSettingsValidator.php
index eefa93945c2d2d905c23e1cfd4276533d1af8191..3ab8b11e3dddc843ea1217b3423c683e5e1fc373 100644
--- a/package_manager/src/Validator/ComposerSettingsValidator.php
+++ b/package_manager/src/Validator/ComposerSettingsValidator.php
@@ -45,8 +45,8 @@ final class ComposerSettingsValidator implements EventSubscriberInterface {
     try {
       $setting = (int) $this->inspector->getConfig('secure-http', $dir);
     }
-    catch (\Exception $exception) {
-      $event->addErrorFromThrowable($exception, $this->t('Unable to determine Composer <code>secure-http</code> setting.'));
+    catch (\Throwable $throwable) {
+      $event->addErrorFromThrowable($throwable, $this->t('Unable to determine Composer <code>secure-http</code> setting.'));
       return;
     }
     if ($setting !== 1) {