pruntime

package
v0.4.15 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 26, 2022 License: ISC Imports: 7 Imported by: 1

Documentation

Overview

Package pruntime provides an interface to the Go standard library’s runtime package using only serializable simple types

Stack traces and code locations have several formats:

codeLocation := pruntime.NewCodeLocation(0)
codeLocation.Base() // package and type
  → mypackage.(*MyType).MyFunc
codeLocation.PackFunc() // very brief
  → mypackage.MyFunc
codeLocation.Name(): // function name only
  → MyFunc
codeLocation.Short() // line, no package path
  → mypackage.(*MyType).MyFunc-myfile.go:19
codeLocation.Long() // uniquely identifiable
  → codeberg.org/haraldrudell/mypackage.(*MyType).MyFunc-myfile.go:19
codeLocation.Full() // everything
  → codeberg.org/haraldrudell/mypackage.(*MyType).MyFunc-/fs/mypackage/myfile.go:19
codeLocation.String() // two lines
  → "codeberg.org/haraldrudell/mypackage.(*MyType).MyFunc\n  /fs/mypackage/myfile.go:19"

Stack can determine where a goroutine was created and whether this is the main thread

pruntime.GoRoutineID()  → 1
pruntime.NewStack(0).Creator.Short()  → main.main-pruntime.go:30
fmt.Println(pruntime.NewStack(0).IsMainThread)  → true
pruntime.NewStack(0).Frames[0].Args  → (0x104c12c60?)

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DebugStack added in v0.4.12

func DebugStack(skipFrames int) (stack string)

DebugStack produces a string stack frame modified debug.Stack: Stack frames other than the callers of puntime.DebugStack are removed. skipFrames allows for removing additional frames. tabs are replaces with two spaces.

func Invocation

func Invocation(stackFramesToSkip int) (stackTrace string)

Invocation returns an invocation stack trace for debug printing, empty string on troubles. The result is similar to the output from debug.Stack, but has some stack frames removed. tabs are replaced by two spaces. stackFramesToSkip 0 means first frame will be the caller of Invocation "goroutine 1 [running]:\ngithub.com/haraldrudell/parl/mains.(*Executable).AddErr(0x1809300, 0x158b620, 0xc000183800, 0x1) mains.(*Executable).AddErr-executable.go:302…"

func IsRuntimeError

func IsRuntimeError(err error) (err1 runtime.Error)

IsRuntimeError determines if err’s error chain contains a runtime.Error

func IsSendOnClosedChannel

func IsSendOnClosedChannel(err error) (is bool)

IsSendOnClosedChannel determines if err’s chain contains the runtime error “send on closed channel”

Types

type CodeLocation

type CodeLocation struct {
	// File is the absolute path to the go source file
	//  /opt/foxyboy/sw/privates/parl/mains/executable.go
	File string
	// Line is the line number in the source file
	//  35
	Line int
	// FuncName is the fully qualified Go package path,
	// a possible value or pointer receiver struct name,
	// and the function name
	//  github.com/haraldrudell/parl/mains.(*Executable).AddErr
	FuncName string
}

CodeLocation is similar to runtime.Frame, but contains basic types string and int only

func GetCodeLocation

func GetCodeLocation(rFrame *runtime.Frame) (cl *CodeLocation)

GetCodeLocation converts a runtime stack frame to a code location stack frame. runtime contains opaque types while code location consists of basic types int and string only

func NewCodeLocation

func NewCodeLocation(stackFramesToSkip int) (cl *CodeLocation)

NewCodeLocation gets data for a single stack frame. if stackFramesToSkip it returns data for the caller of NewCodeLocation

func (*CodeLocation) Base

func (cl *CodeLocation) Base() (baseName string)

Base returns base package name, an optional type name and the function name:

mains.(*Executable).AddErr

func (*CodeLocation) Full

func (cl *CodeLocation) Full() (funcName string)

Full returns all available information on one line the function name, base filename and line number:

mains.(*Executable).AddErr-executable.go:25

func (*CodeLocation) Long

func (cl *CodeLocation) Long() (funcName string)

Short returns base package name, an optional type name and the function name, base filename and line number:

mains.(*Executable).AddErr-executable.go:25

func (*CodeLocation) Name

func (cl *CodeLocation) Name() (funcName string)

FuncName returns function name, characters no space:

AddErr

func (*CodeLocation) PackFunc

func (cl *CodeLocation) PackFunc() (packageDotFunction string)

PackFunc return base package name and function:

mains.AddErr

func (*CodeLocation) Package

func (cl *CodeLocation) Package() (funcName string)

Package return base package name, a single word of characters with no space:

mains

func (*CodeLocation) Short

func (cl *CodeLocation) Short() (funcName string)

Short returns base package name, an optional type name and the function name, base filename and line number:

mains.(*Executable).AddErr-executable.go:25

func (CodeLocation) String

func (cl CodeLocation) String() string

String returns a two-line string representation suitable for a multi-line stack trace. Typical output:

github.com/haraldrudell/parl/error116.(*TypeName).FuncName\n
  /opt/sw/privates/parl/error116/codelocation_test.go:20

type StackSlice added in v0.4.6

type StackSlice []CodeLocation

StackSlice represents a StackSlice of program counters.

func NewStackSlice added in v0.4.6

func NewStackSlice(skip int) (slice StackSlice)

NewStackSlice gets a slice of stack frames

func (StackSlice) Clone added in v0.4.6

func (st StackSlice) Clone() (s StackSlice)

func (StackSlice) Format added in v0.4.6

func (st StackSlice) Format(s fmt.State, verb rune)

Format implements fmt.Formatter

func (StackSlice) Short added in v0.4.6

func (st StackSlice) Short() (s string)

func (StackSlice) String added in v0.4.6

func (st StackSlice) String() (s string)

type X

type X struct {
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL