# package debug
`import "runtime/debug"`
Package debug contains facilities for programs to debug themselves while they are running.
## Index
* [func FreeOSMemory()](#FreeOSMemory)
* [func SetGCPercent(percent int) int](#SetGCPercent)
* [func SetMaxStack(bytes int) int](#SetMaxStack)
* [func SetMaxThreads(threads int) int](#SetMaxThreads)
* [func SetPanicOnFault(enabled bool) bool](#SetPanicOnFault)
* [type GCStats](#GCStats)
* [func ReadGCStats(stats \*GCStats)](#ReadGCStats)
* [func WriteHeapDump(fd uintptr)](#WriteHeapDump)
* [func Stack() []byte](#Stack)
* [func PrintStack()](#PrintStack)
## func [FreeOSMemory](https://github.com/golang/go/blob/master/src/runtime/debug/garbage.go#L103 "View Source")
```
func FreeOSMemory()
```
FreeOSMemory强制进行一次垃圾收集,以释放尽量多的内存回操作系统。(即使没有调用,运行时环境也会在后台任务里逐渐将内存释放给系统)
## func [SetGCPercent](https://github.com/golang/go/blob/master/src/runtime/debug/garbage.go#L93 "View Source")
```
func SetGCPercent(percent int) int
```
SetGCPercent设定垃圾收集的目标百分比:当新申请的内存大小占前次垃圾收集剩余可用内存大小的比率达到设定值时,就会触发垃圾收集。SetGCPercent返回之前的设定。初始值设定为环境变量GOGC的值;如果没有设置该环境变量,初始值为100。percent参数如果是负数值,会关闭垃圾收集。
## func [SetMaxStack](https://github.com/golang/go/blob/master/src/runtime/debug/garbage.go#L117 "View Source")
```
func SetMaxStack(bytes int) int
```
SetMaxStack设置该以被单个go程调用栈可使用的内存最大值。如果任何go程在增加其调用栈时超出了该限制,程序就会崩溃。SetMaxStack返回之前的设置。默认设置在32位系统是250MB,在64位系统是1GB。
SetMaxStack主要用于限制无限递归的go程带来的灾难。 它只会限制未来增长的调用栈。
## func [SetMaxThreads](https://github.com/golang/go/blob/master/src/runtime/debug/garbage.go#L135 "View Source")
```
func SetMaxThreads(threads int) int
```
SetMaxThreads设置go程序可以使用的最大操作系统线程数。如果程序试图使用超过该限制的线程数,就会导致程序崩溃。SetMaxThreads返回之前的设置,初始设置为10000个线程。
该限制控制操作系统线程数,而非go程数。go程序只有在一个go程准备要执行,但现有的线程都阻塞在系统调用、cgo调用或被runtime.LockOSThread函数阻塞在其他go程时,才会创建一个新的线程。
SetMaxThreads主要用于限制程序无限制的创造线程导致的灾难。目的是让程序在干掉操作系统之前,先干掉它自己。
## func [SetPanicOnFault](https://github.com/golang/go/blob/master/src/runtime/debug/garbage.go#L148 "View Source")
```
func SetPanicOnFault(enabled bool) bool
```
SetPanicOnFault控制程序在不期望(非nil)的地址出错时的运行时行为。这些错误一般是因为运行时内存破坏的bug引起的,因此默认反应是使程序崩溃。使用内存映射的文件或进行内存的不安全操作的程序可能会在非nil的地址出现错误;SetPanicOnFault允许这些程序请求运行时只触发一个panic,而不是崩溃。SetPanicOnFault只用于当前的go程。它返回之前的设置。
## type [GCStats](https://github.com/golang/go/blob/master/src/runtime/debug/garbage.go#L14 "View Source")
```
type GCStats struct {
LastGC time.Time // 最近一次垃圾收集的时间
NumGC int64 // 垃圾收集的次数
PauseTotal time.Duration // 所有暂停收集垃圾消耗的总时间
Pause []time.Duration // 每次暂停收集垃圾的消耗的时间
PauseQuantiles []time.Duration
}
```
GCStats收集了近期垃圾收集的信息。
## func [ReadGCStats](https://github.com/golang/go/blob/master/src/runtime/debug/garbage.go#L38 "View Source")
```
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](https://github.com/golang/go/blob/master/src/runtime/debug/garbage.go#L153 "View Source")
```
func WriteHeapDump(fd uintptr)
```
WriteHeapDump将内存分配堆和其中对象的描述写入给定文件描述符fd指定的文件。
堆转储格式参见[http://golang.org/s/go13heapdump](http://golang.org/s/go13heapdump)
## func [Stack](https://github.com/golang/go/blob/master/src/runtime/debug/stack.go#L35 "View Source")
```
func Stack() []byte
```
Stack 返回格式化的go程的调用栈踪迹。 对于每一个调用栈,它包括原文件的行信息和PC值;对go函数还会尝试获取调用该函数的函数或方法,及调用所在行的文本。
此函数已废弃。请使用runtime包中的Stack函数代替。
## func [PrintStack](https://github.com/golang/go/blob/master/src/runtime/debug/stack.go#L25 "View Source")
```
func PrintStack()
```
PrintStack将Stack返回信息打印到标准错误输出。
- 库
- package achive
- package tar
- package zip
- package bufio
- package builtin
- package bytes
- package compress
- package bzip2
- package flate
- package gzip
- package lzw
- package zlib
- package container
- package heap
- package list
- package ring
- package crypto
- package aes
- package cipher
- package des
- package dsa
- package ecdsa
- package elliptic
- package hmac
- package md5
- package rand
- package rc4
- package rsa
- package sha1
- package sha256
- package sha512
- package subtle
- package tls
- package x509
- package pkix
- package database
- package sql
- package driver
- package encoding
- package ascii85
- package asn1
- package base32
- package base64
- package binary
- package csv
- package gob
- package hex
- package json
- package pem
- package xml
- package errors
- package expvar
- package flag
- package fmt
- package go
- package doc
- package format
- package parser
- package printer
- package hash
- package adler32
- package crc32
- package crc64
- package fnv
- package html
- package template
- package image
- package color
- package palette
- package draw
- package gif
- package jpeg
- package png
- package index
- package suffixarray
- package io
- package ioutil
- package log
- package syslog
- package math
- package big
- package cmplx
- package rand
- package mime
- package multipart
- package net
- package http
- package cgi
- package cookiejar
- package fcgi
- package httptest
- package httputil
- package pprof
- package mail
- package rpc
- package jsonrpc
- package smtp
- package textproto
- package url
- package os
- package exec
- package signal
- package user
- package path
- package filepath
- package reflect
- package regexp
- package runtime
- package cgo
- package debug
- package pprof
- package race
- package sort
- package strconv
- package strings
- package sync
- package atomic
- package text
- package scanner
- package tabwriter
- package template
- package time
- package unicode
- package utf16
- package utf8
- package unsafe