papyrus-lang icon indicating copy to clipboard operation
papyrus-lang copied to clipboard

Step-through attribute for debugging

Open joelday opened this issue 5 years ago • 3 comments

-@Scrivener07

"Something like attributes in c#. Here is an idea that might work. In papyrus do a single inline block comment directly above a member to mark as DebuggerStepThrough, maybe with some other symbol too like @. Inline block comments are extremely rare so will likely not conflict with any existing code to date."

; This is my function doc string.
;/@DebuggerStepThrough/;
var Function Foobar(var argument)
    ; Dont bother stepping through this function.
    return none
EndFunction

or

;/@DebuggerStepThrough/; ;/@SomeOtherAttribute/;
var Function Foobar1(var argument)
    ; Dont bother stepping through this function and some other thing.
    return none
EndFunction

;/@DebuggerStepThrough/; 
;/@SomeOtherAttribute/;
var Function Foobar2(var argument)
    ; Dont bother stepping through this function and some other thing.
    return none
EndFunction

;/@DebuggerStepThrough | @SomeOtherAttribute/; 
var Function Foobar3(var argument)
    ; Dont bother stepping through this function and some other thing.
    return none
EndFunction

See Also

  • https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.debuggerstepthroughattribute

joelday avatar Jun 22 '19 16:06 joelday

We can do this within any comment format and can just rely on @AttributeName.

joelday avatar Jun 22 '19 16:06 joelday

Note: This is an example of a mod that uses @something within Papyrus source. https://github.com/schlangster/skyui/blob/master/dist/Data/Scripts/Source/SKI_ActiveEffectsWidget.psc#L126

Its a very popular dependency that provides a Papyrus API for configuration menus and hud widgets. This is just a info tidbit for later. Be sure to peek at the papyrus in that project. SkyUI and its source code is the gold standard for what a mod should be.

Examples
  • ; @implements
  • ; @override
  • ; @interface

Fragments

Fragments are an automatically generated code-behind created by the Creation Kit. These are also some patterns to watch out for.

Examples (Skyrim)

https://github.com/schlangster/skyui/blob/master/dist/Data/Scripts/Source/SKI_QF_ConfigManagerInstance.psc

;BEGIN FRAGMENT CODE - Do not edit anything between this and the end comment
;NEXT FRAGMENT INDEX 1
Scriptname SKI_QF_ConfigManagerInstance Extends Quest Hidden

;BEGIN ALIAS PROPERTY PlayerRef
;ALIAS PROPERTY TYPE ReferenceAlias
ReferenceAlias Property Alias_PlayerRef Auto
;END ALIAS PROPERTY

;BEGIN FRAGMENT Fragment_0
Function Fragment_0()
;BEGIN AUTOCAST TYPE SKI_ConfigManager
Quest __temp = self as Quest
SKI_ConfigManager kmyQuest = __temp as SKI_ConfigManager
;END AUTOCAST
;BEGIN CODE
kmyQuest.ForceReset()
;END CODE
EndFunction
;END FRAGMENT

;END FRAGMENT CODE - Do not edit anything between this and the begin comment

Scrivener07 avatar Jun 23 '19 05:06 Scrivener07

Added details to my previous comment.

Scrivener07 avatar Jun 23 '19 05:06 Scrivener07