# package debug

`import "runtime/debug"`

Package debug contains facilities for programs to debug themselves while they are running.

## func FreeOSMemory

    func FreeOSMemory()

FreeOSMemory强制进行一次垃圾收集，以释放尽量多的内存回操作系统。（即使没有调用，运行时环境也会在后台任务里逐渐将内存释放给系统）

## func SetGCPercent

    func SetGCPercent(percent int) int

SetGCPercent设定垃圾收集的目标百分比：当新申请的内存大小占前次垃圾收集剩余可用内存大小的比率达到设定值时，就会触发垃圾收集。SetGCPercent返回之前的设定。初始值设定为环境变量GOGC的值；如果没有设置该环境变量，初始值为100。percent参数如果是负数值，会关闭垃圾收集。

## func SetMaxStack

    func SetMaxStack(bytes int) int

SetMaxStack设置该以被单个go程调用栈可使用的内存最大值。如果任何go程在增加其调用栈时超出了该限制，程序就会崩溃。SetMaxStack返回之前的设置。默认设置在32位系统是250MB，在64位系统是1GB。

SetMaxStack主要用于限制无限递归的go程带来的灾难。 它只会限制未来增长的调用栈。

## func SetMaxThreads

    func SetMaxThreads(threads int) int

SetMaxThreads设置go程序可以使用的最大操作系统线程数。如果程序试图使用超过该限制的线程数，就会导致程序崩溃。SetMaxThreads返回之前的设置，初始设置为10000个线程。

该限制控制操作系统线程数，而非go程数。go程序只有在一个go程准备要执行，但现有的线程都阻塞在系统调用、cgo调用或被runtime.LockOSThread函数阻塞在其他go程时，才会创建一个新的线程。

SetMaxThreads主要用于限制程序无限制的创造线程导致的灾难。目的是让程序在干掉操作系统之前，先干掉它自己。

## func SetPanicOnFault

    func SetPanicOnFault(enabled bool) bool

SetPanicOnFault控制程序在不期望（非nil）的地址出错时的运行时行为。这些错误一般是因为运行时内存破坏的bug引起的，因此默认反应是使程序崩溃。使用内存映射的文件或进行内存的不安全操作的程序可能会在非nil的地址出现错误；SetPanicOnFault允许这些程序请求运行时只触发一个panic，而不是崩溃。SetPanicOnFault只用于当前的go程。它返回之前的设置。

## type GCStats

    type GCStats struct {
        LastGC         time.Time       // 最近一次垃圾收集的时间
        NumGC          int64           // 垃圾收集的次数
        PauseTotal     time.Duration   // 所有暂停收集垃圾消耗的总时间
        Pause          []time.Duration // 每次暂停收集垃圾的消耗的时间
        PauseQuantiles []time.Duration
    }

GCStats收集了近期垃圾收集的信息。

## func ReadGCStats

    func ReadGCStats(stats *GCStats)

ReadGCStats将垃圾收集信息填入stats里。stats.Pause字段的长度是依赖于系统的；stats.Pause切片如果长度足够会被重用，否则会重新申请。ReadGCStats可能会使用stats.Pause切片的全部容量。

如果stats.PauseQuantiles字段是非空的，ReadGCStats会在其中填写说明暂停时间分配的分位数。例如，如果len(stats.PauseQuantiles)为5，该字段会被填写上0%、25%、50%、75%、100%位置的分位数（就是说，不大于该位置暂停时间的暂停次数占总暂停次数的比例分别是0%、25%……）

## func WriteHeapDump

    func WriteHeapDump(fd uintptr)

WriteHeapDump将内存分配堆和其中对象的描述写入给定文件描述符fd指定的文件。

堆转储格式参见http://golang.org/s/go13heapdump

## func Stack

    func Stack() []byte

Stack 返回格式化的go程的调用栈踪迹。 对于每一个调用栈，它包括原文件的行信息和PC值；对go函数还会尝试获取调用该函数的函数或方法，及调用所在行的文本。

此函数已废弃。请使用runtime包中的Stack函数代替。

## func PrintStack

    func PrintStack()

PrintStack将Stack返回信息打印到标准错误输出。