【发布时间】:2014-09-30 07:39:21
【问题描述】:
尝试在 mac (10.6.8) 上调试用 Qt 编写的应用程序。 Qt 4.8.6,QtCreator 3.2.0,我在/usr/bin/gdb设置了调试器System GDB,编译器gcc-4.2
我要调试代码...
我进入应用程序输出窗口
Debugging starts
Debugging has failed
Debugging has finished
(并且没有命中断点,代码中没有任何开始)
我打开调试日志窗口,我看到的唯一可疑的东西是
....
111^error,msg="Undefined command: \"python\". Try \"help\*.*
NOTE: ENGINE SETUP FAILED
State Changed From EngineSetupRequested(1) to EngineSetupFailed(2)
HANDLE RUNCONTROL FINISHED
.....
在左边,一些命令有
109-interpreter-exec console "python sys.path.insert(1, "/Volumes/QtCreator/..."
110-interpreter-exec console "python sys.path.append("/usr/bin/data-directory/ python)"
111-interpreter-exec console "python from gdbbridge import *"
我检查了python是否已安装...我可以从任何地方键入python并获取它的命令提示符,因此它位于系统路径上...
我读到了一些关于必须签署 fsf 调试器的文章,但我使用的不是 fsf 调试器?
如何在 macx 中调试我的应用程序?
编辑:从命令行尝试 gdb,应用程序作为参数
GNU gdb 6.3.50-20050815 (Apple version gdb-1518) (Sat Feb 12 02:52:12 UTC 2011)
...
This GDB was configured as "x86_64-apple-darwin"...
warning: Unable to read symbols for QtSvg.framework/Versions/4/QtSvg (file not found).
warning: Unable to read symbols from "QtSvg" (not yet mapped into memory).
warning: Unable to read symbols for QtGui.framework/Versions/4/QtGui (file not found).
warning: Unable to read symbols from "QtGui" (not yet mapped into memory).
warning: Unable to read symbols for QtCore.framework/Versions/4/QtCore (file not found).
warning: Unable to read symbols from "QtCore" (not yet mapped into memory).
warning: Unable to read symbols for QtNetwork.framework/Versions/4/QtNetwork (file not found).
warning: Unable to read symbols from "QtNetwork" (not yet mapped into memory).
Reading symbols for shared libraries .
... some warnings that .o is more recent than .dylib in dependent libs... but that I don't have to step into so I don't care...
...
warning: Could not find object file "/usr/llvm-gcc-4.2/bin/../lib/gcc/i686-apple-darwin11/4.2.1/x86_64/crt3.o" - no debug information available for "darwin-crt3.c".
.... done
所以我输入运行
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x0000000000000000
0x00007fff83872c00 in strlen ()
我不知道它在哪里(我知道但真的看不到它)或者它是否是一个实际的字符串指针或其他东西......
我不知道断点在哪里,整个源代码很长并且包含很多很多文件,所以我真的不知道如何从命令行使用 gdb 来做到这一点...
但似乎它确实开始了,没有抱怨python?
开始时的警告 - 这是否意味着仍有希望,如果 gdb 了解其库,则可以以某种方式配置 gdb 以与 Qt 一起运行?
顺便说一句……正在寻找丢失的库…… QT 4.8.4 debug libraries not found on Mac OSX
我尝试使用 lldb 和 qmake 替换我的调试器(在 Qt 中) - 在这两种情况下,我都收到错误“无法创建‘无引擎’类型的调试器引擎”
编辑:我读到的另一个建议是重新编译 Qt Creator Binaries 以添加调试符号...我希望这不是我必须做的,因为
"注意:在 Qt Creator 3.2 中,我们放弃了对 OS X 10.6 (Snow Leopard) 的支持。技术原因是 Apple 在该 OS 版本上不支持任何类型的 C++11。当然这不影响您可以在哪些平台上运行 Qt 应用程序。但无法在 10.6 上运行 Qt Creator 3.2 二进制文件,也无法使用 Apple 提供的工具链在 10.6 上编译 Qt Creator 3.2。 (来自发行说明)
更新:我能够通过放置无数个 qDebug() 语句来找到上述错误的原因(KERN_INVALID_ADDRESS)......虽然这不是我想要完成的,但许多错误。
我仍然有很多错误...附加调试器会很棒。我已经列出了程序所需的库——它们似乎存在。不确定它们是“调试”还是“发布”库。 ....但我并没有尝试单步调试 Qt 源代码,那么如果我有它们的调试符号又有什么关系呢?如果它们是“发布”类型的库,那么我的整个程序,在“调试”中构建,将不会执行甚至无法构建?由于我在“调试”模式下构建代码并执行,所以库必须是正确的,对吧?
好混乱……
【问题讨论】:
-
尝试在命令行上运行 gdb 并调用“gdb /path/to/application.app”,看看是否有同样的问题。 gdb 启动后,输入“run”开始调试。
-
@Merlin069,我试过了 - 请看编辑...也许还有希望?
-
如果您在应用程序包中的二进制文件上运行 otool -L,它会告诉您它在哪里寻找这些库。看看这个答案:stackoverflow.com/questions/18780602/…