> ### gdb調試
* 編譯(gcc)與調試(gdb)
* centos7 安裝go和gdb
~~~
yum install -y go gdb
~~~
* main.go
~~~
package main
import "unsafe"
func main() {
s := "hello world!"
println(unsafe.Sizeof(s), len(s))
}
~~~
* 開始調試
~~~
[root@localhost go]# ls
main.go
[root@localhost go]# go build -gcflags "-N -l" -o main ./main.go
[root@localhost go]# gdb main
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-110.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /usr/local/www/go/main...done.
(gdb) l
1 package main
2
3 import "unsafe"
4
5 func main() {
6 s := "hello world!"
7 println(unsafe.Sizeof(s), len(s))
8 }
(gdb) b main.go:6
Breakpoint 1 at 0x450b4d: file /usr/local/www/go/main.go, line 6.
(gdb) run
Starting program: /usr/local/www/go/main
Breakpoint 1, main.main () at /usr/local/www/go/main.go:6
6 s := "hello world!"
(gdb) p s
$1 = 0x45b180 "\001", '\000' <repeats 15 times>, "\305\006\377\023\a\001\001\201\200\255J\000\000\000\000\000T\212G\000\000\000\000\000\200\t\000\000\000k\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\270H\337\335\002\b\b2\260\255J\000\000\000\000\000T\212G\000\000\000\000\000\023\037\000\000\000\000\000\000\200\261E\000\000\000\000\000\003\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\221U\313q\002\b\b2\260\255J\000\000\000\000\000T\212G\000\000\000\000\000\067\032\000\000\000\000\000\000@\265E\000\000\000\000\000\003\000\000\000\000\000\000\000\020", '\000' <repeats 15 times>...<Address 0x4cc000 out of bounds>
(gdb) ptype s
type = struct string {
uint8 *str;
int len;
}
(gdb)
~~~
- 第一序 入門教程(一)
- 1.1環境配置
- 1.1 環境配置(補充:Linux下安裝)
- 1.1 環境配置(補充:線上部署)
- 1.2 開發工具GoLand
- 1.3 準備工作
- 1.4 第一個應用程序 Hello World
- 1.4 補充 go get github 超時
- 第二序 入門教程(二)
- 2.1 語法結構
- 2.2 常量, 變量
- 2.2.1 命名規則
- 2.2.2 變量
- 2.2.2 變量(補充:類型推斷的好處)
- 2.2.2 變量(補充:泛型)
- 2.2.3 常量
- 2.2.4 iota
- 2.2.5 Unicode字符編碼
- 2.2.6 GBK 轉 UTF8
- 2.3 條件語句
- 2.3.1 判斷語句 if
- 2.3.2 選擇語句 switch
- 2.3.3 循環語句 for
- 2.3.4 遍歷 range
- 2.3.5 跳轉語句 goto, break, continue
- 2.3.6 for 和 for range區別
- 2.4 數組, 切片, 集合, 通道
- 2.4.1 make, len, cap, new, nil
- 2.4.1 make, len, cap, new, nil (補充:nil)
- 2.4.2 數組 array
- 2.4.3.1 切片 slice - 1
- 2.4.3.2 切片 slice - 2
- 2.4.3.3 slice list ring
- 2.4.4 集合 map
- 2.4.5 goroutine
- 2.4.6 channel
- 2.5 函數, 結構, 方法, 接口
- 2.5.1 函數 function
- 2.5.2 結構 struct
- 2.5.3 方法 method
- 2.5.4 接口 interface
- 2.5.5 Go是面向對象的語言嗎?
- 2.5.6 json序列化和反序列化
- 2.5.7 T和指針T
- 2.6 defer, panic, recover
- 2.6.1 defer
- 2.6.2 painc, recover
- 2.7 指針
- 2.7 指針(補充: 可尋址和不可尋址)
- 2.8 反射
- 第三序 相關閱讀
- 3.1 相關閱讀1
- 3.2 相關閱讀2
- 3.3 相關閱讀3
- 第四序 性能分析和調試工具
- 4.1 pprof工具介紹
- 4.2 CPU信息采集
- 4.3 Heap信息采集
- 4.4 Http信息采集
- 4.5 單元測試(功能測試)
- 4.6 基準測試(壓力測試/性能測試)
- 4.7 示例測試(example)
- 4.8 gdb調試
- 第五序 網絡編程
- 5.1 http請求和響應
- 5.2 socket
- 5.2.1 概念
- 5.2.2 服務端
- 5.2.3 客戶端
- 5.3 WebSocket
- 5.3.1 第一版
- 5.3.1.1 服務端
- 5.3.1.2 客戶端
- 5.3.1.3 相關閱讀
- 5.3.2 服務端
- 5.3.3 客戶端
- 5.3.4 nginx配置
- 5.3.5 修改版
- 5.3.5.1 草稿 - 1
- 5.3.5.2 草稿 - 2
- 5.3.5.3 草稿 - 3
- 5.3.5.4 服務端
- 5.3.5.5 客戶端
- 5.4 打印客戶端頭部信息
- 第六序 算法
- 6.1 查找
- 6.1.1 二分查找
- 6.2 排序
- 6.2.1 交換排序 - 冒泡排序
- 6.2.2 插入排序 - 直接插入排序
- 6.2.3 插入排序 - 希爾排序
- 6.2.4 交換排序 - 快速排序
- 6.3 算法求解應用
- 第七序 微服務
- 7.1 相關閱讀
- 7.2 gRPC
- 7.2.1 準備工作
- 7.2.2 編譯.proto文件
- 7.2.3 gRPC服務端
- 7.2.4 gRPC客戶端
- 7.3 micro/micro
- 7.3.1 服務發現
- 7.3.2 安裝consul
- 7.3.3 準備工作
- 7.3.4 服務端
- 7.3.5 客戶端
- 7.3.6 默認的服務發現
- 7.3.7 文檔閱讀
- 7.4 protobuf序列化
- 第八序 Web
- 8.1 視圖模板
- 8.1.1 main.go
- 8.1.2 login.html
- 8.2 原生留言板
- 8.2.1 原生sql
- 8.2.1.1 main.go
- 8.2.1.2 view
- 8.2.1.2.1 index.html
- 8.2.1.2.2 create.html
- 8.2.2 sqlx
- 8.3 Gin框架
- 第九序 數據庫
- 9.0 資料收集
- 9.1 Redis數據庫 (gomodule/redigo)
- 9.1.1 介紹
- 9.1.2 消息隊列
- 9.2 Redis數據庫(go-redis/redis)
- 第十序 日記
- 10.1 SimplePanic
- 10.2 第一版日記庫
- 10.2.1 winnielog
- 10.2.2 使用
- 第十一序 中間鍵
- 11.0 資料收集
- 11.1 NSQ
- 11.2 zookeeper
- 11.3 kafka
- 第十二序 加密
- 12.1 Token
- 12.2 SHA1
- 2.3 RSA + AES
- 第十三序 分布式鎖
- 第十四序 標準庫練習
- container/list
- 鏈表
- container/ring
- 環形鏈表
- context
- flag (獲取命令行參數)
- io
- strconv
- sync
- 為什么需要鎖?
- 互斥鎖
- 讀寫鎖
- 條件變量
- 計數器
- 并發安全字典
- 自制并發安全字典
- 官方并發安全字典
- 連接池
- sync/atomic
- 原子操作
- 第十五序 其它內容
- 文件讀寫
- 工作池
- 第十六序 相關閱讀