mirror of https://github.com/mongodb/mongo
SERVER-112407 fix gdb vscode launch config (#43243)
GitOrigin-RevId: 116fbff35363c0fcb93535526e36123053370ae4
This commit is contained in:
parent
73f6d82e9e
commit
b1e08aa1be
|
|
@ -12,6 +12,7 @@ OWNERS.yml @10gen/server-root-ownership @svc-auto-approve-bot
|
|||
.bazelignore @10gen/devprod-build @svc-auto-approve-bot
|
||||
.bazeliskrc @10gen/devprod-build @svc-auto-approve-bot
|
||||
.bazelversion @10gen/devprod-build @svc-auto-approve-bot
|
||||
.vscode_defaults/** @10gen/devprod-build @svc-auto-approve-bot
|
||||
.clang-format @10gen/server-programmability @svc-auto-approve-bot
|
||||
.clang-tidy.in @10gen/server-programmability @svc-auto-approve-bot
|
||||
**/.clang-tidy @10gen/server-programmability @svc-auto-approve-bot
|
||||
|
|
@ -43,6 +44,9 @@ WORKSPACE.bazel @10gen/devprod-build @svc-auto-approve-bot
|
|||
/.github/ALLOWED_UNOWNED_FILES.yml @svc-auto-approve-bot alex.neben@mongodb.com
|
||||
/.github/workflows @10gen/devprod-correctness @svc-auto-approve-bot
|
||||
|
||||
# The following patterns are parsed from ./.vscode_defaults/OWNERS.yml
|
||||
/.vscode_defaults/**/* @10gen/devprod-build @svc-auto-approve-bot
|
||||
|
||||
# The following patterns are parsed from ./bazel/OWNERS.yml
|
||||
/bazel/**/* @10gen/devprod-build @svc-auto-approve-bot
|
||||
/bazel/repository_rules/profiling_data.bzl @10gen/performance @svc-auto-approve-bot
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
version: 1.0.0
|
||||
filters:
|
||||
- "*":
|
||||
approvers:
|
||||
- 10gen/devprod-build
|
||||
|
|
@ -182,7 +182,7 @@
|
|||
"ignoreFailures": false
|
||||
},
|
||||
],
|
||||
"miDebuggerPath": "${workspaceFolder}/bazel-${workspaceFolderBasename}/external/gdb/v5/bin/gdb",
|
||||
"miDebuggerPath": "${workspaceFolder}/buildscripts/vscode_bazel_gdb.sh",
|
||||
},
|
||||
{
|
||||
"name": "attach",
|
||||
|
|
@ -235,7 +235,7 @@
|
|||
"ignoreFailures": false
|
||||
},
|
||||
],
|
||||
"miDebuggerPath": "${workspaceFolder}/bazel-${workspaceFolderBasename}/external/gdb/v5/bin/gdb",
|
||||
"miDebuggerPath": "${workspaceFolder}/buildscripts/vscode_bazel_gdb.sh",
|
||||
},
|
||||
{
|
||||
"name": "coredump",
|
||||
|
|
@ -245,7 +245,7 @@
|
|||
"program": "${workspaceFolder}/${input:runTargets}",
|
||||
"args": [],
|
||||
"MIMode": "gdb",
|
||||
"miDebuggerPath": "${workspaceFolder}/bazel-${workspaceFolderBasename}/external/gdb/v5/bin/gdb",
|
||||
"miDebuggerPath": "${workspaceFolder}/buildscripts/vscode_bazel_gdb.sh",
|
||||
"preLaunchTask": "_prelaunch_task",
|
||||
"setupCommands": [
|
||||
{
|
||||
|
|
@ -309,7 +309,7 @@
|
|||
"id": "runTargets",
|
||||
"command": "shellCommand.execute",
|
||||
"args": {
|
||||
"command": "bazel query 'attr(tags, \"mongo_binary\", //...)' union 'attr(tags, \"mongo_unittest\", //...)' | grep mongo | grep -v \"_with_debug\" | grep -v third_party | sed 's;//;bazel-bin/;g' | sed 's;:;/;g'",
|
||||
"command": "buildscripts/vscode_launch_targets.sh 2> /dev/null",
|
||||
"cwd": "${workspaceFolder}",
|
||||
"taskId": "runTargets",
|
||||
"rememberPrevious": true,
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ filters:
|
|||
- .bazelversion:
|
||||
approvers:
|
||||
- 10gen/devprod-build
|
||||
- ".vscode_defaults/**":
|
||||
approvers:
|
||||
- 10gen/devprod-build
|
||||
- ".clang-format":
|
||||
approvers:
|
||||
- 10gen/server-programmability
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Repo root from script location
|
||||
cd "$(dirname "$0")"/..
|
||||
|
||||
# Exec real gdb with all original args
|
||||
exec bazel run gdb -- "$@"
|
||||
|
|
@ -0,0 +1,98 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# 1) what we want to query
|
||||
QUERY=${1:-"attr(tags, \"mongo_binary\", //...) union attr(tags, \"mongo_unittest\", //...)"}
|
||||
|
||||
# 2) assume VSCode runs this from the repo root
|
||||
WORKSPACE=$(pwd)
|
||||
BAZELOUT="${WORKSPACE}/bazel-out/"
|
||||
|
||||
# 3) run bazel query in background and give it, say, 2 seconds to finish
|
||||
OUT_FILE=$(mktemp)
|
||||
ERR_FILE=$(mktemp)
|
||||
|
||||
(bazel query "$QUERY" >"$OUT_FILE" 2>"$ERR_FILE") &
|
||||
BAZEL_PID=$!
|
||||
|
||||
# how long we let it run (in seconds)
|
||||
TIME_BUDGET=5
|
||||
SLEEP_SLICE=0.1
|
||||
|
||||
elapsed=0
|
||||
busy=0
|
||||
while kill -0 "$BAZEL_PID" 2>/dev/null; do
|
||||
# still running
|
||||
if (($(echo "$elapsed >= $TIME_BUDGET" | bc))); then
|
||||
busy=1
|
||||
break
|
||||
fi
|
||||
sleep "$SLEEP_SLICE"
|
||||
elapsed=$(echo "$elapsed + $SLEEP_SLICE" | bc)
|
||||
done
|
||||
|
||||
if ((busy)); then
|
||||
# kill the stuck query
|
||||
kill "$BAZEL_PID" >/dev/null 2>&1 || true
|
||||
echo "# bazel query did not finish in $TIME_BUDGET seconds (maybe a build is running?)."
|
||||
rm -f "$OUT_FILE" "$ERR_FILE"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# wait for query to exit and get status
|
||||
wait "$BAZEL_PID"
|
||||
Q_STATUS=$?
|
||||
|
||||
if ((Q_STATUS != 0)); then
|
||||
echo "# bazel query failed: $(cat "$ERR_FILE")"
|
||||
rm -f "$OUT_FILE" "$ERR_FILE"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 4) now we have labels in $OUT_FILE
|
||||
mapfile -t RAW_LABELS <"$OUT_FILE"
|
||||
rm -f "$OUT_FILE" "$ERR_FILE"
|
||||
|
||||
FOUND=()
|
||||
|
||||
for label in "${RAW_LABELS[@]}"; do
|
||||
[[ -z "$label" ]] && continue
|
||||
[[ "$label" == *"_with_debug"* ]] && continue
|
||||
[[ "$label" == *"_ci_wrapper"* ]] && continue
|
||||
[[ "$label" == *"third_party"* ]] && continue
|
||||
[[ "$label" != //* ]] && continue
|
||||
|
||||
rest=${label#//}
|
||||
if [[ "$rest" == *:* ]]; then
|
||||
pkg=${rest%%:*}
|
||||
name=${rest##*:}
|
||||
else
|
||||
pkg=$rest
|
||||
name=${rest##*/}
|
||||
fi
|
||||
|
||||
# ONLY look in real bazel-out
|
||||
if [[ -d "$BAZELOUT" ]]; then
|
||||
while IFS= read -r -d '' cfg; do
|
||||
[[ -d "$cfg/bin" ]] || continue
|
||||
|
||||
cand="$cfg/bin/$pkg/$name"
|
||||
cand_exe="$cand.exe"
|
||||
|
||||
if [[ -f "$cand" ]]; then
|
||||
rel=${cand#"$WORKSPACE/"}
|
||||
FOUND+=("$rel")
|
||||
elif [[ -f "$cand_exe" ]]; then
|
||||
rel=${cand_exe#"$WORKSPACE/"}
|
||||
FOUND+=("$rel")
|
||||
fi
|
||||
done < <(find "$BAZELOUT" -mindepth 1 -maxdepth 1 -type d -print0)
|
||||
fi
|
||||
done
|
||||
|
||||
if ((${#FOUND[@]} == 0)); then
|
||||
echo "# no bazel-out artifacts found for query: $QUERY"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
printf '%s\n' "${FOUND[@]}" | sort -u
|
||||
Loading…
Reference in New Issue