1. PHP 8.2.5; Arcanist at `d47289622650137dd1a4cc7d6deafa54fcc340ee`; Phorge at `8eaa7c1ccf3d75d438e83e074a28ea7de1f15d37`
2. Go to an existing dashboard, like http://phorge.localhost/dashboard/view/1/
3. Select the {nav icon=plus, name=Create Panel} button
4. Select `Tab Panel` to go to http://phorge.localhost/dashboard/panel/edit/?contextPHID=PHID-DSHB-ophnrt7yzfiqm5xqtoa3&columnKey=main&panelType=tabs
5. Enter `tabpaneltest` in the `Name` field.
6. Select the `Create Panel` button.
7. Back on http://phorge.localhost/dashboard/view/1/ , see that the new panel only displays `RuntimeException: substr(): Passing null to parameter #1 ($string) of type string is deprecated`:
{F286193}
With Phorge's Developer Mode enabled, no stacktrace is printed in the PHP error log or in DarkConsole (after applying `D25165` and `D25188`).
```
diff --git a/src/error/PhutilErrorHandler.php b/src/error/PhutilErrorHandler.php
index 63d5b492..a4d8f0bf 100644
--- a/src/error/PhutilErrorHandler.php
+++ b/src/error/PhutilErrorHandler.php
@@ -258,7 +258,8 @@ final class PhutilErrorHandler extends Phobject {
// See T13499. Convert all other runtime errors not handled in a more
// specific way into runtime exceptions.
- throw new RuntimeException($str);
+ $whatever = $str." in ".$file.":".$line;
+ throw new RuntimeException($whatever);
}
/**
```
adds the source file and line to the error message output:
{F286195}
Working around that line leads to more exceptions:
{F286200}
{F286202}