Skip to content

Commit c6642fb

Browse files
committed
LLDB remote debugging working for the first time
1 parent a1ea86e commit c6642fb

File tree

3 files changed

+40
-14
lines changed

3 files changed

+40
-14
lines changed

core/adapters/lldbadapter.cpp

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1157,8 +1157,12 @@ Ref<Metadata> LldbAdapter::GetProperty(const std::string &name)
11571157
for (size_t i = 0; i < m_debugger.GetNumAvailablePlatforms(); i++)
11581158
{
11591159
auto platform = m_debugger.GetAvailablePlatformInfoAtIndex(i);
1160+
auto nameData = platform.GetValueForKey("name");
1161+
char name[1024];
1162+
nameData.GetStringValue(name, 1024);
1163+
platforms.emplace_back(name);
11601164
}
1161-
// return Metadata(platforms);
1165+
return new Metadata(platforms);
11621166
}
11631167
return nullptr;
11641168
}
@@ -1181,3 +1185,21 @@ bool LldbAdapter::SetProperty(const std::string &name, const Ref<Metadata> &valu
11811185
}
11821186
return false;
11831187
}
1188+
1189+
1190+
bool LldbAdapter::ConnectToDebugServer(const std::string &server, std::uint32_t port)
1191+
{
1192+
auto platform = m_debugger.GetSelectedPlatform();
1193+
auto connectionString = fmt::format("connect://{}:{}", server, port);
1194+
SBPlatformConnectOptions options(connectionString.c_str());
1195+
auto error = platform.ConnectRemote(options);
1196+
return error.Success();
1197+
}
1198+
1199+
1200+
bool LldbAdapter::DisconnectDebugServer()
1201+
{
1202+
auto platform = m_debugger.GetSelectedPlatform();
1203+
platform.DisconnectRemote();
1204+
return true;
1205+
}

core/adapters/lldbadapter.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ namespace BinaryNinjaDebugger {
114114
Ref<Metadata> GetProperty(const std::string& name) override;
115115

116116
bool SetProperty(const std::string& name, const Ref<Metadata>& value) override;
117+
118+
bool ConnectToDebugServer(const std::string &server, std::uint32_t port) override;
119+
120+
bool DisconnectDebugServer() override;
117121
};
118122

119123
class LldbAdapterType: public DebugAdapterType

ui/debugserversetting.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,13 @@ DebugServerSettingsDialog::DebugServerSettingsDialog(QWidget* parent, DebuggerCo
3636
titleLayout->setContentsMargins(0, 0, 0, 0);
3737

3838
m_platformEntry = new QComboBox(this);
39-
// workaround for the missing Metadata API
40-
m_platformEntry->setEditable(true);
41-
42-
// auto platformsMetaData = m_controller->GetAdapterProperty("platforms");
43-
// if (platformsMetaData->IsStringList())
44-
// {
45-
// auto platforms = platformsMetaData->GetStringList();
46-
// for (const auto& platform: platforms)
47-
// m_platformEntry->addItem(QString::fromStdString(platform));
48-
// }
39+
auto platformsMetaData = m_controller->GetAdapterProperty("platforms");
40+
if (platformsMetaData->IsStringList())
41+
{
42+
auto platforms = platformsMetaData->GetStringList();
43+
for (const auto& platform: platforms)
44+
m_platformEntry->addItem(QString::fromStdString(platform));
45+
}
4946

5047
auto currentPlatformMetadata = m_controller->GetAdapterProperty("current_platform");
5148
if (currentPlatformMetadata && currentPlatformMetadata->IsString())
@@ -111,9 +108,12 @@ void DebugServerSettingsDialog::apply()
111108
m_controller->GetData()->StoreMetadata("debugger.remote_port", data);
112109

113110
const auto platform = m_platformEntry->currentText().toStdString();
114-
data = new Metadata(platform);
115-
m_controller->SetAdapterProperty("current_platform", data);
116-
m_controller->GetData()->StoreMetadata("debugger.platform", data);
111+
if (!platform.empty())
112+
{
113+
data = new Metadata(platform);
114+
m_controller->SetAdapterProperty("current_platform", data);
115+
m_controller->GetData()->StoreMetadata("debugger.platform", data);
116+
}
117117

118118
accept();
119119
}

0 commit comments

Comments
 (0)