How to xdebug hook_views_data_alter()

Lets first talk about what does hook_views_data_alter() do in first place. Views is a query editor, it queries DB, so this hook alters how our data is queried. As in views UI you add, fields, filters, sorts, relationships, here you will have an exposure of all DB tables you can make queries on and data on what to use for fields, filters and sorting. Most commonly you will try to change handler for some field, so you will use hook_views_data_alter and add some id, for example as stated in views.api file 

$data['node_field_data']['title']['field']['id'] = 'node_title';

which states that we will use node_title handler for handling output of title of nodes. Handler id is put in annotation of the class that handles this, looking like this below, so basically this is ID of plugin as in D8 we use plugins

 * @ViewsField("node_title")

for full example of this, you can check this tutorial

Now on to debugging

Many people tried to debug hook_views_data_alter() by adding breakpoints or debug outputs in actual hook, problem is they didn't succeed in that way to get any info. Right way is to clear cache and then put breakpoint on method that calls this hooks, which is in class class ViewsData
(path /core/modules/views/src/ViewsData.php) around line 233 

  protected function getData() {
    $this->fullyLoaded = TRUE;

    if ($data = $this->cacheGet($this->baseCid)) {
      return $data->data;
    else {

here you can get $data class and $data array that can be altered. When looking at code, this alteration is called at

$this->moduleHandler->alter('views_data', $data);

so inspecting that will give you info on what you can/need to change to get results you want.