有没有办法在不停止/退出正在运行的程序的情况下退出 gdb 连接?我需要在 gdb 连接关闭后继续运行程序。
概括
我正在尝试在 docker 映像 (Ubuntu) 中调试 C++ 程序,同时在我的主机系统 (OS X) 上使用 VSCode 作为 IDE。在对 gdbserver 和 VSCode 任务进行各种修补后,我现在能够成功运行调试器,但是每次启动调试会话时,VSCode 都会挂起 10 秒,然后报告错误消息:
“无法跟踪 preLaunchTask 'docker gdb'。”
如果我点击这个错误,我可以正常地完美调试,但是每次调试时都要等待 10 秒,这让我非常沮丧。
细节
我的 Docker 映像是通过以下方式启动的,因此我的源代码安装在“app”目录中。安全设置是我在 Stack Overflow 上的其他地方找到的,需要允许 gdbserver:
docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -it -v "$(pwd):/app" -w "/app" -p 9091:9091 {imageName} /bin/bash
Run Code Online (Sandbox Code Playgroud)
当我在主机上启动调试会话时,我使用这个启动命令,将本地 gdb 连接到 docker gdbserver,并运行一个预启动任务:
{
"version": "0.2.0",
"configurations": [
{
"name": "Remote unit test",
"type": "cppdbg",
"request": "launch",
"program": "./tests/ConfigurationTest.cpp_TestRunner",
"miDebuggerServerAddress": "localhost:9091",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceRoot}",
"environment": …Run Code Online (Sandbox Code Playgroud) 我正在 ARM-64 中设置 op-tee。我想知道是否可以使用在 ubuntu 18.04 下运行的 Visual Studio 代码来调试它。
到目前为止,我已经能够在 QEMU 中编译和运行 op-tee。并且还能够使用命令行 gdb 连接 gdb-server(点击此链接:https : //www.op-tee.org/docs/debug/)。
现在我想使用一些 GUI 而不是 gdb。由于我正在使用 Visual Studio 代码,所以我想知道是否可以配置 vsCode 来这样做?
我试过安装 cortex-debug 扩展(我不确定它是否正确),也试过 c/c++ 调试附加。但我不能让他们工作!
这是我的 launch.json 文件:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Attach",
"type": "cppdbg",
"request": "attach",
"program": "${workspaceFolder}/optee_os/out/arm/core/tee.elf",
"miDebuggerServerAddress": "localhost:1234",
"processId": "${command:pickProcess}",
"MIMode": …Run Code Online (Sandbox Code Playgroud) 这是我的情况:
我可以使用终端通过以下命令进行调试:
我尝试在Fedora系统中使用CLion 16.2.2进行远程调试:
尽管似乎GDB服务器和客户端之间的连接正在工作,但似乎我缺少一些东西,因为调试器工具(进入,移入,继续等)仍然显示为灰色,并且从未达到断点。
从第一个测试中,我知道我使用的断点应该可以工作。
我怀疑我在这一行中传递程序参数(--myarg)的方式:gdbserver localhost:8080 myprog --myarg它不正确,但我不知道该在哪里传递它。
我期待能够使用此出色的IDE进行调试,而不是使用终端进行调试。我很近但是被卡在这里。我真的很感谢您的帮助!
谢谢
gdb mi和gdb服务器有什么区别?两者都可以用于本地调试吗?
我在使用Red Hat上的gdb服务器进行调试时遇到了问题.调试启动器停止在72%.
我正在用汇编程序编写一个小内核。我在 QEMU 中运行它,并遇到一些错误的问题。现在我想用dbg调试内核。所以我像这样组装它:
$ nasm -g -f elf -o myos.elf myos.asm
$ objcopy --only-keep-debug myos.elf myos.sym
$ objcopy -O binary myos.elf myos.bin
Run Code Online (Sandbox Code Playgroud)
然后我在 QEMU 中运行它:
$ qemu-system-i386 -s -S myos.bin
Run Code Online (Sandbox Code Playgroud)
然后我与 gdb 连接:
$ gdb
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
0x0000fff0 in ?? ()
symbol-file myos.sym
Reading symbols from /home/sven/Projekte/myos/myos.sym...done.
Run Code Online (Sandbox Code Playgroud)
welcome我的内核中有一个指向字符串的标签。在测试时,我尝试查看该字符串,结果如下:
(gdb) x/32b welcome
0x1e <welcome>: 0x00 0xf0 0xa5 0xfe 0x00 0xf0 0x87 0xe9
0x26: 0x00 0xf0 0x6e 0xc9 0x00 0xf0 0x6e 0xc9
0x2e: 0x00 0xf0 …Run Code Online (Sandbox Code Playgroud) 我正在64位linux上工作,需要为我的aarch64 Android手机构建gdbserver。NDK中有预构建的gdbserver ,但它使用NDK包中的python,而不是使用我的系统python,我无法安装其他python插件。
如何找到需要哪个--target和参数?我尝试了和 google 之类的“build gdbserver aarch64”或“gdbserver configure android”,但没有找到 aarch64 Android 的任何答案。--host./configure--help
对于gdb我可以使用./configure --enable-targets=all,但是有什么用gdbserver呢?是否有所有可用参数的“列表”?
这是我尝试构建gdbserver 的方法
CC=arm-none-eabi-gcc, CXX=arm-none-eabi-g++,使可执行文件在 PATH 中可用 ../configure
../configure --host=aarch64-linux --target=aarch64-linux-androideabi
../configure --host=aarch64-linux-androideabi --target=aarch64-linux
../configure --host=aarch64-linux-androideabi --target=aarch64-linux-androideabi
Run Code Online (Sandbox Code Playgroud)
...
make[3]: Nothing to be done for 'all'.
make[3]: Leaving directory '/opt/gdb-9.1/gdb/gdbserver/build/build-libiberty-gdbserver/testsuite'
make[2]: Leaving directory '/opt/gdb-9.1/gdb/gdbserver/build/build-libiberty-gdbserver'
make[1]: Leaving directory '/opt/gdb-9.1/gdb/gdbserver/build'
make: *** No rule to make target …Run Code Online (Sandbox Code Playgroud) 这是一个绝对初学者的问题。
我有一个 Ubuntu 14.04 主机,上面安装了 gdb 7.7.1 和一个为 qnx 交叉编译的项目。我还有一个 qnx 目标,我想在上面调试我的应用程序。
互联网上的说明告诉我gdb在 PC + 上使用任何一个gdbserver,但我没有安装 gdbserver 并且我认为我无法为 qnx 编译 gdb。我有一个叫pdebug. qnx 的说明告诉我 gdb 必须有target qnx命令,它显然不构成。
这是我所做的:
# Assuming that 255.255.255.255 is the target ip and 1234 is the port
# On target
pdebug 1234
On host
gdb
gdb> target remote 255.255.255.255:1234
Run Code Online (Sandbox Code Playgroud)
然后我收到了几个警告,然后gdb>再次警告,因为这是正常的。
我设法在我的主机和目标之间安装了一个连接,但是当我点击rungdb 时,它尝试运行我的本地应用程序副本,而不是在目标上运行它。
我正在尝试从 Visual Studio 针对 Linux 的 Windows 子系统。该项目在 Visual Studio 中构建良好:
1>------ Rebuild All started: Project: LinuxConsoleApp, Configuration: Debug x64 ------
1>Cleaning remote project directory
1>Validating architecture
1>Validating sources
1>Copying sources remotely to 'localhost'
1>Starting remote build
1>Compiling sources:
1>main.cpp
1>Linking objects
1>LinuxConsoleApp.vcxproj -> C:\...\LinuxConsoleApp\bin\x64\Debug\LinuxConsoleApp.out
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
Run Code Online (Sandbox Code Playgroud)
我可以从 Windows 上的 bash 命令行提示符运行它:
linux@windows-bash:/mnt/c/.../LinuxConsoleApp/bin/x64/Debug$ ./LinuxConsoleApp.out
hello from LinuxConsoleApp!
Run Code Online (Sandbox Code Playgroud)
但是,当我设置断点以从 Visual Studio 调试它时,出现错误:
“无法启动 gdb。您的系统中缺少 gdb,需要安装,请使用您系统的包管理器进行安装”
我确实在 Windows 的 Linux 子系统上安装了 gdbserver。有谁知道我还需要什么才能使它工作?提前致谢!