1// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: GPL-3.0-or-later
4
5#include "cmakedebug.h"
6
7#include "services/option/optionmanager.h"
8
9#include <QDBusMessage>
10#include <QDBusConnection>
11#include <QUuid>
12
13class CMakeDebugPrivate
14{
15 friend class CMakeDebug;
16};
17
18CMakeDebug::CMakeDebug(QObject *parent)
19 : QObject(parent)
20 , d(new CMakeDebugPrivate())
21{
22
23}
24
25CMakeDebug::~CMakeDebug()
26{
27 if (d)
28 delete d;
29}
30
31bool CMakeDebug::prepareDebug(QString &retMsg)
32{
33 QString debuggerTool = OptionManager::getInstance()->getCxxDebuggerToolPath();
34 if (!debuggerTool.contains("gdb")) {
35 retMsg = tr("The gdb is required, please install it in console with \"sudo apt install gdb\", "
36 "and then restart the tool, reselect the CMake Debugger in Options Dialog...");
37 return false;
38 }
39
40 return true;
41}
42
43bool CMakeDebug::requestDAPPort(const QString &uuid, const QString &kit,
44 const QString &targetPath, const QStringList &arguments,
45 QString &retMsg)
46{
47 QDBusMessage msg = QDBusMessage::createSignal("/path",
48 "com.deepin.unioncode.interface",
49 "getDebugPort");
50
51 msg << uuid
52 << kit
53 << targetPath
54 << arguments;
55 bool ret = QDBusConnection::sessionBus().send(msg);
56 if (!ret) {
57 retMsg = tr("Request cxx dap port failed, please retry.");
58 return false;
59 }
60
61 return true;
62}
63
64bool CMakeDebug::isLaunchNotAttach()
65{
66 return false;
67}
68
69dap::LaunchRequest CMakeDebug::launchDAP(const QString &targetPath, const QStringList &argments)
70{
71 dap::LaunchRequest request;
72 request.name = "(gdb) Launch";
73 request.type = "cppdbg";
74 request.request = "launch";
75 request.program = targetPath.toStdString();
76 request.stopAtEntry = false;
77 dap::array<dap::string> arrayArg;
78 foreach (QString arg, argments) {
79 arrayArg.push_back(arg.toStdString());
80 }
81 request.args = arrayArg;
82 request.externalConsole = false;
83 request.MIMode = "gdb";
84 request.__sessionId = QUuid::createUuid().toString().toStdString();
85
86 return request;
87}
88
89