How to add the current title to the breadcrumb without preprocess function?
There is also an alter hook for breadcrumbs, where you can alter them in a non-theme specific way, in case the breadcrumbs are also used somewhere else.

I've implemented this in a project:

/**
 * Implements hook_system_breadcrumb_alter().
 */
function yourmodule_system_breadcrumb_alter(array &amp;$breadcrumb, RouteMatchInterface $route_match, array $context) {
  // Append the current page title to the breadcrumb for non-admin routes.
  if ($breadcrumb &amp;&amp; !\Drupal::service('router.admin_context')-&gt;isAdminRoute()) {

    $title = \Drupal::service('title_resolver')
      -&gt;getTitle($request, $route_match-&gt;getRouteObject());
    if (!empty($title)) {
      breadcrumb-&gt;addLink(Link::createFromRoute($title, '&lt;none&gt;'));
    }
  }
}


EDIT for Drupal 8.2.x

I add a lot of error with this code, which I believe is the best approach for altering the breadcrumb has seen on Drupal API.
So here is the code for Drupal 8.2.x

/**
 * Implements hook_system_breadcrumb_alter().
 */
function YOURMODULE_system_breadcrumb_alter(\Drupal\Core\Breadcrumb\Breadcrumb &amp;$breadcrumb, \Drupal\Core\Routing\RouteMatchInterface $route_match, array $context) {
  // Append the current page title to the breadcrumb for non-admin routes.
  if ($breadcrumb &amp;&amp; !\Drupal::service('router.admin_context')-&gt;isAdminRoute()) {

    $title = \Drupal::service('title_resolver')-&gt;getTitle(\Drupal::request(), $route_match-&gt;getRouteObject());
    if (!empty($title)) {
      $breadcrumb-&gt;addLink(\Drupal\Core\Link::createFromRoute($title, '&lt;none&gt;'));
    }
  }
}