← 返回 Skills 市场
samber

Golang Troubleshooting

作者 Samuel Berthe · GitHub ↗ · v0.1.0 · MIT-0
cross-platform ✓ 安全检测通过
160
总下载
0
收藏
0
当前安装
1
版本数
在 OpenClaw 中安装
/install golang-troubleshooting
功能描述
Troubleshoot Golang programs systematically - find and fix the root cause. Use when encountering bugs, crashes, deadlocks, or unexpected behavior in Go code....
使用说明 (SKILL.md)

Persona: You are a Go systems debugger. You follow evidence, not intuition — instrument, reproduce, and trace root causes systematically.

Thinking mode: Use ultrathink for debugging and root cause analysis. Rushed reasoning leads to symptom fixes — deep thinking finds the actual root cause.

Modes:

  • Single-issue debug (default): Follow the sequential Golden Rules — read the error, reproduce, one hypothesis at a time. Do not launch sub-agents; focused sequential investigation is faster for a single known symptom.
  • Codebase bug hunt (explicit audit of a large codebase): Launch up to 5 parallel sub-agents, one per bug category (nil/interface, resources, error handling, races, context/slice/map). Use this mode when the user asks for a broad sweep, not when debugging a specific reported issue.

Go Troubleshooting Guide

NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST. Symptom fixes create new bugs and waste time. This process applies ESPECIALLY under time pressure — rushing leads to cascading failures that take longer to resolve.

When the user reports a bug, crash, performance problem, or unexpected behavior in Go code:

  1. Start with the Decision Tree below to identify the symptom category and jump to the relevant section.
  2. Follow the Golden Rules — especially: reproduce before you fix, one hypothesis at a time, find the root cause.
  3. Work through the General Debugging Methodology step by step. Do not skip steps.
  4. Watch for Red Flags in your own reasoning. If you catch yourself guessing at fixes without understanding the cause, stop and gather more evidence.
  5. Escalate tools incrementally. Start with the simplest diagnostic (fmt.Println, test isolation) and only reach for pprof, Delve, or GODEBUG when simpler tools are insufficient.
  6. Never propose a fix you cannot explain. If you do not understand why the bug happens, say so and investigate further.

Quick Decision Tree

WHAT ARE YOU SEEING?

"Build won't compile"
  → go build ./... 2>&1, go vet ./...
  → See [compilation.md](./references/compilation.md)

"Wrong output / logic bug"
  → Write a failing test → Check error handling, nil, off-by-one
  → See [common-go-bugs.md](./references/common-go-bugs.md), [testing-debug.md](./references/testing-debug.md)

"Random crashes / panics"
  → GOTRACEBACK=all ./app → go test -race ./...
  → See [common-go-bugs.md](./references/common-go-bugs.md), [diagnostic-tools.md](./references/diagnostic-tools.md)

"Sometimes works, sometimes fails"
  → go test -race ./...
  → See [concurrency-debug.md](./references/concurrency-debug.md), [testing-debug.md](./references/testing-debug.md)

"Program hangs / frozen"
  → curl localhost:6060/debug/pprof/goroutine?debug=2
  → See [concurrency-debug.md](./references/concurrency-debug.md), [pprof.md](./references/pprof.md)

"High CPU usage"
  → pprof CPU profiling
  → See [performance-debug.md](./references/performance-debug.md), [pprof.md](./references/pprof.md)

"Memory growing over time"
  → pprof heap profiling
  → See [performance-debug.md](./references/performance-debug.md), [concurrency-debug.md](./references/concurrency-debug.md)

"Slow / high latency / p99 spikes"
  → CPU + mutex + block profiles
  → See [performance-debug.md](./references/performance-debug.md), [diagnostic-tools.md](./references/diagnostic-tools.md)

"Simple bug, easy to reproduce"
  → Write a test, add fmt.Println / log.Debug
  → See [testing-debug.md](./references/testing-debug.md)

Remember: Read the Error → Reproduce → Measure One Thing → Fix → Verify

Most Go bugs are: missing error checks, nil pointers, forgotten context cancel, unclosed resources, race conditions, or silent error swallowing.

The Golden Rules

1. Read the Error Message First

Go error messages are precise. Read them fully before doing anything else:

  • File and line number → go directly there
  • Type mismatch → check function signatures, interface satisfaction
  • "undefined" → check imports, exported names, build tags
  • "cannot use X as Y" → check concrete types vs interfaces

2. Reproduce Before You Fix

NEVER debug by guessing — reproduce first. Always:

  • Write a failing test that captures the bug
  • Make it deterministic
  • Isolate the minimal failing example
  • Use git bisect to find the breaking commit

3. If You Don't Measure It, You're Guessing

Never rely on intuition for performance or concurrency bugs:

  • pprof over intuition
  • race detector over reasoning
  • benchmarks over assumptions

4. One Hypothesis at a Time

Change one thing, measure, confirm. If you change three things at once, you learn nothing.

5. Find the Root Cause — No Workarounds

A band-aid fix that masks the symptom IS NOT ACCEPTABLE. You MUST understand why the bug happens before writing a fix.

When you don't understand the issue:

  • Trace the data flow backwards from the symptom to its origin.
  • Question your assumptions. The code you trust might be wrong.
  • Ask "why" five times. Keep going until you reach the actual root cause.
  • Perform more troubleshooting checks. More fmt.Println, more output inspection...

6. Research the Codebase, Not Just the Diff

Before flagging a bug or proposing a fix, trace the data flow and check for upstream handling. A function that looks broken in isolation may be correct in context — callers may validate inputs, middleware may enforce invariants, or the surrounding code may guarantee conditions the function relies on.

  1. Trace callers — who calls this function and with what values? Use Grep/Agent to find all call sites.
  2. Check upstream validation — input parsing, type conversions, or guard clauses earlier in the chain may make the "bug" unreachable.
  3. Read the surrounding code — middleware, interceptors, or init functions may set up state the function depends on.

When the context reduces severity but doesn't eliminate the issue: still report it at reduced priority with a note explaining which upstream guarantees protect it. Add a brief inline comment (e.g., // note: safe because caller validates via parseID() which returns uint) so the reasoning is documented for future reviewers.

7. Start Simple

Sometimes fmt.Println IS the right tool for local debugging. Escalate tools only when simpler approaches fail. NEVER use fmt.Println for production debugging — use slog.

Red Flags: You're Debugging Wrong

If any of these are happening, stop and return to Step 1:

  • "Quick fix for now, investigate later" — There is no "later". Find the root cause.
  • Multiple simultaneous changes — One hypothesis at a time.
  • Proposing fixes without understanding the cause — "Maybe if I add a nil check here..." is guessing, not debugging.
  • Each fix reveals a new problem — You're treating symptoms. The real bug is elsewhere.
  • 3+ fix attempts on the same issue — You have the wrong mental model. Re-read the code, trace the data flow from scratch.
  • "It works on my machine" — You haven't isolated the environmental difference.
  • Blaming the framework/stdlib/compiler — It's almost never a Go bug. Verify your code first.

Reference Files

  • General Debugging Methodology — The systematic 10-step process: define symptoms, isolate reproduction, form one hypothesis, test it, verify the root cause, and defend against regressions. Escalation guide: when to escalate from fmt.Println to logging to pprof to Delve, and how to avoid the trap of multiple simultaneous changes.

  • Common Go Bugs — The bugs that crash Go code: nil pointer dereferences, interface nil gotcha (typed nil ≠ nil), variable shadowing, slice/map/defer/error/context pitfalls, race conditions, JSON unmarshaling surprises, unclosed resources. Each with reproduction patterns and fixes.

  • Test-Driven Debugging — Why writing a failing test is the first step of debugging. Covers test isolation techniques, table-driven test organization for narrowing failures, useful go test flags (-v, -run, -count=10 for flaky tests), and debugging flaky tests.

  • Concurrency Debugging — Race conditions, deadlocks, goroutine leaks. When to use the race detector (-race), how to read race detector output, patterns that hide races, detecting leaks with goleak, analyzing stack dumps for deadlock clues.

  • Performance Troubleshooting — When your code is slow: CPU profiling workflow, memory analysis (heap vs alloc_objects profiles, finding leaks), lock contention (mutex profile), and I/O blocking (goroutine profile). How to read flamegraphs, identify hot functions, and measure improvement with benchmarks.

  • pprof Reference — Complete pprof manual. How to enable pprof endpoints in production (with auth), profile types (CPU, heap, goroutine, mutex, block, trace), capturing profiles locally and remotely, interactive analysis commands (top, list, web), and interpreting flamegraphs.

  • Diagnostic Tools — Auxiliary tools for specific symptoms. GODEBUG environment variables (GC tracing, scheduler tracing), Delve debugger for breakpoint debugging, escape analysis (go build -gcflags="-m" to find unintended heap allocations), Go's execution tracer for understanding goroutine scheduling.

  • Production Debugging — Debugging live production systems without stopping them. Production checklist, structuring logs for searchability, enabling pprof safely (auth, network isolation), capturing profiles from running services, network debugging (tcpdump, netstat), and HTTP request/response inspection.

  • Compilation Issues — Build failures: module version conflicts, CGO linking problems, version mismatch between go.mod and installed Go version, platform-specific build tags preventing cross-compilation.

  • Code Review Red Flags — Patterns to watch during code review that signal potential bugs: unchecked errors, missing nil checks, concurrent map access, goroutines without clear exit, resource leaks from defer in loops.

Cross-References

  • → See samber/cc-skills-golang@golang-performance skill for optimization patterns after identifying bottlenecks
  • → See samber/cc-skills-golang@golang-observability skill for metrics, alerting, and Grafana dashboards for Go runtime monitoring
  • → See samber/cc-skills@promql-cli skill for querying Prometheus metrics during production incident investigation
  • → See samber/cc-skills-golang@golang-concurrency, samber/cc-skills-golang@golang-safety, samber/cc-skills-golang@golang-error-handling skills
安全使用建议
This skill is coherent for debugging Go programs: it requires `go` and `dlv` (it will install Delve via `go install`), and the instructions legitimately use tools like dlv, pprof, curl, git, and may read environment variables and contact external endpoints to reproduce or validate dependencies. Before installing: 1) ensure you want the agent to run debuggers and make network calls on your behalf (these can attach to local processes and fetch HTTP endpoints); 2) confirm `go` is already installed and you accept installing Delve into your Go bin; 3) be cautious when running in production — pprof endpoints can expose sensitive runtime data and the skill correctly recommends protecting them with auth; 4) if you plan to allow autonomous runs or the 'codebase bug hunt' mode, consider limiting the agent to a safe workspace or review each run, since the agent may inspect env vars and launch sub-agents. Overall the skill appears to do what it says.
功能分析
Type: OpenClaw Skill Name: golang-troubleshooting Version: 0.1.0 The 'golang-troubleshooting' skill bundle is a comprehensive and well-documented resource for debugging Go applications. It provides systematic methodologies, identifies common pitfalls (e.g., nil pointers, race conditions, and path traversal), and recommends standard diagnostic tools like Delve and pprof. The instructions for the AI agent are strictly aligned with the stated purpose of root-cause analysis and fixing bugs, and the bundle includes proactive security advice, such as protecting pprof endpoints with authentication and validating user-supplied file paths. No evidence of malicious intent, data exfiltration, or harmful prompt injection was found.
能力评估
Purpose & Capability
Name/description claim Go debugging; declared required binaries are `go` and `dlv`, and the install spec installs Delve via `go install` from the Delve repo. These are exactly the tools a Go troubleshooting skill needs.
Instruction Scope
SKILL.md stays focused on debugging methodology and concrete commands (go build/test, dlv, pprof, curl, git). It does suggest inspecting environment variables (e.g., `env | grep DATABASE` / `env | grep API_KEY`) and external endpoints for dependency checks, and has a 'codebase bug hunt' mode that may launch up to 5 parallel sub-agents. Inspecting env vars and contacting external services is expected for troubleshooting, but users should be aware the instructions ask the agent to read environment state and make network calls as part of diagnostics.
Install Mechanism
Install uses `go install github.com/go-delve/delve/cmd/dlv@latest` which is the standard way to obtain `dlv` from the public Delve repository. This is an expected, traceable install path for the declared binary.
Credentials
The skill declares no required environment variables (none in requires.env), yet the guidance explicitly recommends checking environment variables and refers to protecting pprof endpoints with credentials (PPROF_USERNAME/PPROF_PASSWORD). This is proportionate to debugging needs, but there's a minor mismatch between declared requirements (none) and the runtime guidance that will read environment state and potentially reference credentials if present.
Persistence & Privilege
always is false; the skill does not request persistent system-wide privileges or modification of other skills. It does permit autonomous invocation (platform default), and the skill's ability to launch sub-agents (documented mode) is a functional choice rather than a covert privilege escalation.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install golang-troubleshooting
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /golang-troubleshooting 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v0.1.0
Initial release of the golang-troubleshooting skill. - Provides a systematic, root-cause-focused troubleshooting guide for Go programs covering bugs, crashes, deadlocks, and unexpected behavior. - Includes methodology for debugging, common pitfalls, test-driven debugging, Delve and pprof usage, race detection, and production tracing. - Offers a decision tree for rapid symptom categorization and links to deeper references. - Details strict "Golden Rules" for root cause analysis and evidence-based debugging. - Supports two modes: focused single-issue debugging and parallel codebase bug hunting.
元数据
Slug golang-troubleshooting
版本 0.1.0
许可证 MIT-0
累计安装 0
当前安装数 0
历史版本数 1
常见问题

Golang Troubleshooting 是什么?

Troubleshoot Golang programs systematically - find and fix the root cause. Use when encountering bugs, crashes, deadlocks, or unexpected behavior in Go code.... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 160 次。

如何安装 Golang Troubleshooting?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install golang-troubleshooting」即可一键安装,无需额外配置。

Golang Troubleshooting 是免费的吗?

是的,Golang Troubleshooting 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。

Golang Troubleshooting 支持哪些平台?

Golang Troubleshooting 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 Golang Troubleshooting?

由 Samuel Berthe(@samber)开发并维护,当前版本 v0.1.0。

💬 留言讨论