我目前在调试通过 QProcess 启动进程的程序时遇到了一些问题。只需在没有 dbg 的情况下执行二进制文件就可以了,但是当我尝试使用 gdb 调试可执行文件时,当进程启动时,我得到了一个 SIGTRAP。之后堆栈总是显示'??' 而不是函数名。继续时,我得到一个 SIGILL。我发现没有设置断点时不会导致陷阱。
在我的项目中,我还得到以下输出:
Probes-based dynamic linker interface failed.
我不确定这是否与加载的插件或库有关。
可以使用以下代码重现该问题(“基于探测器的动态链接器接口失败。”输出除外):
#include <QCoreApplication>
#include <QProcess>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QProcess proc;
QString exe = "echo";
QStringList arguments;
arguments << "Test";
proc.start(exe, arguments);
if (!proc.waitForFinished()) {
qDebug() << "failed to start" << proc.exitCode() << proc.errorString();
}
qDebug() << "process finished";
qDebug() << proc.readAllStandardOutput();
return a.exec();
}
我的操作系统是arch linux(最新)
- Qt5:qt5-base 5.15.1-1
- GDB:gdb 9.2-1
- 铿锵++:铿锵10.0.1-1
有人知道使用 dbg 调试时导致 SIGTRAP 的原因是什么吗?