1) Displaytext is the most practical in most cases, but not always. What specifically are you trying to debug?
DebugBreak or Assert (depending on whether you're working in Osiris or Story) shows up in the error log of your editor.
Alternatively, you may be able to find the information for which you're looking in the Osiris log or the behaviour script debugger.
2) Your solution is a possible one, and may be the best one.
An alternative is to use CharacterLookFromTrigger using you destination trigger to determine the direction in which the character looks. You can see what direction that is by selecting the point trigger and pressing ctrl-alt-T or toggling the "Selected Trigger Shapes" option in the View menu.
If you've got several characters walking to the same trigger but then looking in different directions, using additional point triggers and CharacterLookAt may indeed be better. You can also just have your character look at an in-game object (a character or dynamic item).
3) It's probably best to define a new database like
DB_ShovelRewardEmpty((STRING)_Reward)
and add a
PROC
ProcShovelRewards((CHARACTERGUID)_Player,(STRING)_Reward)
AND
DB_ShovelRewardEmpty((STRING)_Reward)
THEN
Proc_StartDialog(1,"GLO_AD_ShovelFailed", _Player);
It may seem intuitive to check on whether the _Reward identifier is in none of the DB_ShovelReward* databases when it's dug up, but the case may be that the ProcShovelReward procedure is overloaded for a particular mound, and then your character will have the GLO_AD_ShovelFailed AD even though they've found something.