> ### 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)
~~~
- 第一例 留言板
- 第二例 gRPC使用例子
- 第三例 基于go-micro做服務注冊和服務發現
- 第四例 聊天室
- 第五例 工具庫 第五例 并發安全字典
- dao
- common
- common.go
- config
- config.go
- gorm
- grom.go
- sqlx
- sqlx.go
- kafka
- kafka.go
- log
- log.go
- log2.go
- redis
- redis.go
- zookeeper
- zookeeper.go
- init
- main.go
- 第六例 原生sql操作
- 第七例 sqlx操作
- 第八例 Redis數據庫(gomodule/redigo)
- 第九例 Redis消息隊列
- 第十例 Redis集群連接
- 第十一例 Zookeeper操作
- 第十二例 Kafka操作
- 第十三例 NSQ操作
- 第十四例 二分查找
- 第十五例 交換排序 - 冒泡排序
- 第十六例 插入排序 - 直接插入排序
- 第十七例 插入排序 - 希爾排序
- 第十八例 交換排序 - 快速排序
- 第十九例 算法求解應用
- 第二十例 pprof性能分析
- 第二一例 CPU信息采集
- 第二二例 Heap信息采集
- 第二三例 Http信息采集
- 第二四例 單元測試(功能測試)
- 第二五例 基準測試(壓力測試/性能測試)
- 第二六例 gdb調試
- 第二七例 json序列化和反序列化
- 第二八例 protobuf序列化和反序列化
- 第二九例 包管理工具 go vendor
- 第三十例 包管理工具 go mod
- 第三一例 zip壓縮
- 第三二例 交叉編譯
- 第三三例 線上環境部署
- 第三四例 業務:實現固定周期維護
- 第三五例 聊天室(精簡版)
- 第三六例 并發安全字典
- 第三七例 導出Excel表格
- 第三八例 導出CSV表格
- 第三九例 聊天室(高并發)
- 第四十例 JWT (Json Web Token)
- 第四一例 雪花算法生成 Id
- 第四二例 對稱加密 AES
- 第四三例 非對稱加密 RSA
- 第四四例 簽名算法 SHA1
- 第四五例 數據庫操作 gorm
- 第四六例 數據庫操作 gorm 集合
- 數據庫連接和創建表
- 查詢 - 分頁
- 查詢所有數據
- 查詢單條數據
- 插入一條或多條數據
- 更新一條或多條數據
- 更新一條或多條數據(有零值)
- 第四七例 RSA(MD5WithRSA 算法)簽名和驗簽方式
- 第四八例 線上部署腳本
- 第四九例 Elasticsearch
- 第五十例 對象池
- 第五十一例 相關閱讀