GDB【5】-嵌入式平台xxx-linux-gdb远程调试动态库

2023-11-09

1.下位机准备工作

下位机调试启动脚本

   #!/bin/bash 
   
   version='01.00.0005'
   NAND_PATH='/nandflash'
   LIB_PATH=$NAND_PATH/lib
   BIN_PATH=$NAND_PATH/bin
   CFG_PATH=$NAND_PATH/config
   DB_PATH=$NAND_PATH/database
   LOG_PATH=$NAND_PATH/log
   SH_PATH=$NAND_PATH/script
   WEB_PATH=$NAND_PATH/webserver/thttpd
   SRC_PATH=$NAND_PATH/src
   TMP_DB_PATH=/tmp/db
  
  
   tftp -g -r libxxx_prtl_k3.so 192.168.20.156
   rm -f /usr/lib/libxxx_prtl_k3.so
   ln -s $LIB_PATH/libxxx_prtl_k3.so /usr/lib/libxxx_prtl_k3.so
   gdbserver 192.168.20.156:7000 $BIN_PATH/xxx_udp -p 50001

line4:硬件平台上存放动态库的绝对路径/nandflash/lib
line16:利用tftp将需要的调试的动态库下载进入/nandflash/lib中
line18:下位机建立软连接到系统动态中,以便程序运行时能找到动态库
line19:启动gdbsever远程调试

root@lig-ppc:/nandflash/lib# sh 34FDstartdebug.sh 
Process /nandflash/bin/lig_udp created; pid = 5602
Listening on port 7000

2 回到 PC 端,远程连接下位机gdbserver

1.启动gdb

(develp)>>> powerpc-linux-gdb 
GNU gdb (GDB) 7.6
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 "--host=i686-eldk-linux --target=powerpc-linux".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
(gdb) target remote 192.168.20.208:7000
Remote debugging using 192.168.20.208:7000
warning: Could not load vsyscall page because no executable was specified
try using the "file" command first.
0x0ffd7b50 in ?? ()
(gdb) file lig_udp
A program is being debugged already.
Are you sure you want to change the file? (y or n) y
Reading symbols from /home/sheldon/lig_pro/CPMS-34/APP/lig_udp/lig_udp...done.
(gdb) c
Continuing.
^C
Program received signal SIGINT, Interrupt.
0xb7ef3bd8 in ?? ()

关键步骤:
1 因为动态库运行时才会被加载,所以一定要先运行将需要的动态库加载完毕
2.Ctrl+c 将正在运行的程序打断暂时挂起
3.info sharedlibrary 查看已经加载的动态库

(gdb) 
(gdb) info sharedlibrary
warning: Could not load shared library symbols for 10 libraries, e.g. linux-vdso32.so.1.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
From        To          Syms Read   Shared Object Library
                        No          linux-vdso32.so.1
                        No          /lib/preloadable_libiconv.so
                        No          /usr/lib/libsqlite3.so.0
                        No          /lib/libpthread.so.0
                        No          /lib/librt.so.1
                        No          /usr/lib/libxxx_prtl_k3.so
                        No          /usr/lib/libxxx_matrix.so
                        No          /lib/libc.so.6
                        No          /lib/libdl.so.2
                        No          /lib/ld.so.1
(gdb) set solib-search-path /tftpboot                               
Reading symbols from /tftpboot/libxxx_prtl_k3.so...done.
Loaded symbols for /tftpboot/libxxx_prtl_k3.so
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
  1. set solib-search-path设置动态库的搜索路径,该命令可设置多个搜索路径
    路径之间使用“:”隔开(在linux中为冒号,DOS和Win32中为分号)
    /tftpboot 我已经把自己生成的动态库拷贝到这个文件下面,方便tftp上传下载使用
    (可以根据自己喜好设置不同路径)
    5.再次查看加载的动态库,要调试的目标动态库已经有了地址,标识号已经全部读到
    7.设置断点
    8.继续运行
    8.发送数据
(gdb) info sharedlibrary
From        To          Syms Read   Shared Object Library
                        No          linux-vdso32.so.1
                        No          /lib/preloadable_libiconv.so
                        No          /usr/lib/libsqlite3.so.0
                        No          /lib/libpthread.so.0
                        No          /lib/librt.so.1
0x0fd960e0  0x0fdbc44c  Yes         /tftpboot/libxxx_prtl_k3.so
                        No          /usr/lib/libxxx_matrix.so
                        No          /lib/libc.so.6
                        No          /lib/libdl.so.2
                        No          /lib/ld.so.1
(gdb) b xxx_prtl_k3_set_cpedid
Breakpoint 1 at 0xfdb3b98: file /home/sheldon/xxx_pro/CPMS-34/APP/pk3000/src/xxx_k3_matrix_edid.c, line 123. 
(gdb) c
Continuing.

Breakpoint 1, xxx_prtl_k3_set_cpedid (handle=0x10030420) at /home/sheldon/xxx_pro/CPMS-34/APP/pk3000/src/xxx_k3_matrix_edid.c:123
123		char  dest_bitmap[32]={0};

网上还有用
set solib-absolute-prefix ,set sysroot,以及设置环境变量 LD_LIBRARY_PATH,但是我并没有成功
还请不吝赐教

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GDB【5】-嵌入式平台xxx-linux-gdb远程调试动态库 的相关文章

  • 无法摆脱 GDB 中的“值已被优化掉”

    我正在调试CPython可执行的GDB尽管禁用了所有变量 但仍无法获取某些变量的值GCC优化 gdb print co value has been optimized out gdb frame 0 PyEval EvalFrameDef
  • 如何在 Xcode 4 中从断点操作打印字符串值?

    我有一个断点操作 并且正在使用下拉列表中的 日志 选项 我想打印出字符串 摘要 值 我正在这样做 the person name is p name 但这会打印内存地址 我可以切换到调试器命令选项并执行以下操作 po f name 但后来我
  • 如何判断共享库加载到进程地址空间中的位置?

    我正在尝试调试一个共享库 其中有使用 gdb 的源代码和调试符号 我没有实际使用此共享库的进程的调试符号或代码 我自己编译它 所以我可以拥有一切 但生成的二进制文件被剥离 以模拟我没有代码的情况 该进程打印我正在尝试调试的目标函数 foo
  • 如何使用gdb来探索堆栈/堆?

    谁能给我一个快速概述 给我指出一种检查 C 程序堆栈 和堆 的方法的文档 我认为这应该用 GDB 来完成 但如果有其他更直接的替代方案 那么也应该没问题 Thanks 您可以使用 x 命令转储原始内存 因此 如果您想查看堆栈或堆的位 请尝试
  • 在 Linux 的 gdb 中启用 memleak 选项

    我试图查看哪个进程导致内存泄漏 并转储导致它的堆以查看问题所在 我应该在 gdb 中使用哪个命令来设置内存泄漏并检查堆 I tried gdb check leaks checkpoint can t find fork function
  • 如何在 gdb 中附加进程

    我有一个简单的 C 程序 它分叉一个进程 然后运行一个可执行文件 我想将子进程附加到 gdb 我在控制台中运行主程序并打开另一个控制台来查找子进程的 pid 然后使用以下命令启动 gdb gdb attach 12271 where 122
  • 将大核心文件转换为“minicore”文件

    如何将核心文件减少到仅线程堆栈 我希望能够运行 gdbthread apply all bt在迷你核心上 仅此而已 我正在处理大型 gt 4GB 多线程 Linux ELF 核心文件 这些文件太大而无法返回进行分析 我见过谷歌断点器 htt
  • 如何知道gdb附加了哪个进程(stat: T)?

    当 gdb 附加进程时 该进程的 stat 为 T 例如 root 6507 0 0 0 0 67896 952 Ss 12 01 0 00 mytest root 6508 0 0 0 0 156472 7120 Sl 12 01 0 0
  • Google crashpad 上的一个交叉编译平台应用程序。 Ubuntu 中无法读取 dmp 文件

    我有一个小qt项目 https github com apalomer qt crashpad test我想跟踪一个分段错误 这是一个示例 分段错误是出于测试目的而手动添加的 在实际项目中我不知道留在那里的分段错误 我决定使用 google
  • gdb 输入文件中的十六进制值

    我正在尝试通过使用 gdb 内的 run 我可以成功地溢出程序 但在将十六进制值附加到字符串时遇到问题 我尝试过引用 将 mem addr 的值转换为 ascii 以及各种转义尝试 但没有成功 输入文件示例 AAAA x42 在上面的示例中
  • 在 gdb 中设置应用程序关联

    有没有一种简单的方法可以设置我正在调试的应用程序的亲和力 而无需将 gdb 锁定到同一核心 我问的原因是应用程序以实时优先级运行 并且需要在单核上运行 目前我使用这个命令行 taskset c 3 gdbserver 1234 app ou
  • 有没有办法在 gdb 中设置一个以调用堆栈为条件的断点?

    我正在 Linux 上的 gdb 7 1 中调试 C 我有一个函数a 代码中很多地方都会调用它 我想在其中设置一个断点 但前提是它是从b 有什么办法可以做到吗 有没有办法做到这一点 只有当b 被叫自c 等等无穷无尽 Update 现在有一个
  • Visual Studio Code,调试子进程不起作用

    我有这个确切的问题 https github com Microsoft vscode cpptools issues 511 https github com Microsoft vscode cpptools issues 511 但那
  • gdb 错误 - 文件不是可执行格式:无法识别文件格式

    我正在尝试使用 gdb 调试某个名为 xdf 的程序 但是当我运行 gdb xdf 时 出现以下错误 home nealtitusthomas X ray astronomy heasoft 6 24 x86 64 pc linux gnu
  • 在 C++ 代码 gdb 中回溯指针

    我在运行 C 应用程序时遇到段错误 在 gdb 中 它显示我的一个指针位置已损坏 但我在应用程序期间创建了 10 万个这样的对象指针 我怎样才能看到导致崩溃的一个 我可以在 bt 命令中执行任何操作来查看该指针的生命周期吗 谢谢 鲁奇 据我
  • 在GDB中的每一行设置断点

    有没有办法用GDB在代码的每一行设置断点 明明我不想打b addr对于每一行 所以我想知道是否有一种快速的方法来做到这一点 Edit请注意 我正在运行由其他人创建的二进制文件 并且我无权访问源代码 不幸的是 该二进制文件尚未使用 g 标志进
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • “gdb”调试器奇怪地跳过断点

    这是我的代码的一小段 l2tp inspector cc 14 else if f info gt key proto UDP PROTO 15 if size gt 4 16 uint32 t l2tp part 17 l2tp part
  • 使用 math.h 函数时 gdb 给出奇怪的输出[重复]

    这个问题在这里已经有答案了 可能的重复 为什么 gdb 将 sqrt 3 计算为 0 https stackoverflow com questions 5122570 why does gdb evaluate sqrt3 to 0 这里
  • 如何让 UIAutomation、模拟器和 Xcode 调试器同时运行?

    谁能向我指出有关如何使 Instruments 运行 UIAutomation 脚本并使用在模拟器中运行的调试器启动 iPhone 应用程序的文档 限制条件 我只有 iPhone 3g 硬件来测试和调试 而 UIAutomation 无法可

随机推荐