请教如何用gdb调试跟踪dlopen打开的动态链接库

用dlopen加载
用dlsym解析出的库函数, 无法单步跟踪进去

而且gdb总是在启动调试程序提示:
Warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.

什么是"dynamic linker breakpoint function"?哪位大侠解释一下。

我的环境是自己做的QNX 6.3嵌入式系统,很小,很多so都没往里放,是不是我缺了什么库呀?

急等答案。

另一个问题:
在Windows下使用ntox86-gdb.exe调试远程主机
target qnx 192.168.0.1:8000
file xxxx_g
sym xxxx_g
upload xxxx_g /tmp/xxxx_g
上传成功了,我检查过目标机的/tmp下确实有了xxxx_g
但当我
run /tmp/xxxx_g
却总是提示
remote (spaw error): no such file or directory.
郁闷呀!用IDE调试这个程序是可以的.

在/usr/lib中有两个符号连接
ldqnx.so.1和ldqnx.so.2
把这两个东西加上就能在目标机上开gdb调试dlopen加载动态链接库了

但是,:frowning:

在IDE中仍然跟踪不进去, 有谁能救我于水火呀?

在对project进行debug定义的时候(Debug As … 就是选择在什么目标上执行等),有一个"Download"的Tag,里面有定义 “Do not download shared libraries to target”,修改这个定义可能对你有帮助。

http://www.qnx.com/developers/docs/6.3.0SP3/ide_en/user_guide/debug.html#debug

这个文件的 Starting your debugging session 那一节里的第一个图。

哈哈,多谢,多谢。

补充一点
你所说的只解决了到在目标机上到哪找到共享库的问题

要调试还必须有符号表。应在IDE的Debug对话框的Debug标签下,选"shared librarys"子标签, 指定从host(注意,加载符号表是从host而不是target)的什么地方读so的符号表。

以前我用gdb在目标机上调试,是把xxxx_g.so放到目标机上,才能调试,所以用IDE时就想当然地认为把xxxx_g.so upload到目标机上,gdb就自然能找到符号表了,没想到还要在IDE里做这么一步。