Q:

Magento 2 Impossible To Trace Admin Grid Error: Fatal error: Method Magento\Ui\TemplateEngine\Xhtml\Result::__toString() must not throw an exception

Because of the high reliance of XML files, I am having a very hard time figuring out the cause of this error when creating a custom admin grid: 

Fatal error: Method
  Magento\Ui\TemplateEngine\Xhtml\Result::__toString() must not throw an
  exception in
  C:\wamp64\www\mage2\vendor\magento\module-ui\Component\Wrapper\UiComponent.php
  on line 0

I am trying to make an admin grid for the sales_shipment_item table. 
So far I have:

Used xdebug and put it within the __toString() method of the Result class, it does not show what the real error is
I have var_dump-ed the variables within the __toString() method
I have developer mode turned on in Magento 2
I have checked the var/logs and it shows nothing helpful

I have successfully made other admin custom grids, but trying to figure out the actual error is like a needle in a haystack. Has anyone found a better way of debugging these? I have looked over all the grid xml, di.xml, and models and all looks ok. 

A:

The error you're getting is indeed triggered in vendor\magento\module-ui\Component\Wrapper\UiComponent.php.
However, it is not triggered at line 0 but when the result is being converted to a string in the following method in the return statement:
protected function _toHtml()
{
    foreach ($this->getChildNames() as $childName) {
        $childBlock = $this->getLayout()->getBlock($childName);
        if ($childBlock) {
            $wrapper = $this->blockWrapperFactory->create([
                'block' => $childBlock,
                'data' => [
                    'name' => 'block_' . $childName
                ]
            ]);
            $this->component->addComponent('block_' . $childName, $wrapper);
        }
    }

    $result = $this->component->render();
    return (string)$result;
}

Here's what you can try to debug your problem:

check what $result contains before the string conversion and return statement is called 
get informations about the component that is causing an issue by calling $component->getName(), $component->getComponentName() and $component->getData() to help you finding out what the problem is

