gpt4 book ai didi

c - 如何使用 GDB 调试共享对象库中的函数?

转载 作者:行者123 更新时间:2023-12-03 16:37:46 24 4
gpt4 key购买 nike

我正在尝试验证共享对象库中函数的功能。在带有 main 的程序中功能,我只想 start程序和 gdb 会自动在 main 上断点,但这显然在这里不可用。

假设我有一些 add.c :

long add(long x, long y) {
return x + y;
}

我用 gcc -shared -o libadd.so -fPIC add.c 编译这个并将其加载到 GDB 中:
(gdb) file libadd.so
Reading symbols from libadd.so...(no debugging symbols found)...done.
(gdb) start
Function "main" not defined.
Make breakpoint pending on future shared library load? (y or [n])
Starting program: /tmp/minimal/libadd.so

Program received signal SIGSEGV, Segmentation fault.
0x0000000000000001 in ?? ()

最好,我希望能够使用类似于下面的 gdb:
(gdb) file libadd.so
Reading symbols from libadd.so...(no debugging symbols found)...done.
(gdb) call (long)add(5,6)
$1 = 11

但是这个调用的结果是 You can't do that without a process to debug .

我可以在 GDB 中调试这样的库吗?

最佳答案

您可以通过 starti 这样做, 如下所示:

(gdb) file libadd.so
Reading symbols from libadd.so...(no debugging symbols found)...done.
(gdb) starti
Starting program /tmp/minimal/libadd.so

Program stopped.
0x00007ffff7dfd4a0 in deregister_tm_clones ()
(gdb) call (long)add(5,6)
$1 = 11

您也可以对包含 main 函数的二进制文件执行此操作,如 this similar question 中所示。 .

关于c - 如何使用 GDB 调试共享对象库中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59690952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com