# 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