在LLDB中,我可以调用方法并生成C++;上课? 我试图用CLAN和LLDB来探索复杂的C++应用程序的行为。我在应用程序中设置了一个断点。一旦到达那个断点,我就想创建一个简单C++类的实例,然后在断点上下文中调用一个方法。p>
例如,以下是我的应用程序:在LLDB中,我可以调用方法并生成C++;上课? 我试图用CLAN和LLDB来探索复杂的C++应用程序的行为。我在应用程序中设置了一个断点。一旦到达那个断点,我就想创建一个简单C++类的实例,然后在断点上下文中调用一个方法。p>,c++,debugging,clang,lldb,C++,Debugging,Clang,Lldb,例如,以下是我的应用程序: #include <iostream> #include <vector> struct Point { int x; int y; }; int main() { std::vector<Point> points; points.push_back(Point{3, 4}); // <--------- Breakpoint here int total = 0; for (const au
#include <iostream>
#include <vector>
struct Point {
int x;
int y;
};
int main() {
std::vector<Point> points;
points.push_back(Point{3, 4});
// <--------- Breakpoint here
int total = 0;
for (const auto& p : points) {
total += p.x * p.y;
}
std::cout << "Total: " << total << std::endl;
return 0;
}
我可以创建一个对象,这很好
(lldb) expr auto $x = Point{1, 2}
(lldb) expr $x
(Point) $x = {
x = 1
y = 2
}
但是,我无法将其推入向量:
(lldb) expr points.push_back($x)
error: Couldn't lookup symbols:
__ZNSt3__16vectorI5PointNS_9allocatorIS1_EEE9push_backERKS1_
可以在调试器中创建对象。告诉调试器要在表达式解析器中创建持久对象的诀窍是,在创建或引用它时,给它一个以“$”开头的名称。然后lldb将确保对象持续存在 但是,请注意,使用中提到的STL类时的注意事项:
谢谢@Jim,我能制作一个物体。你知道为什么我不能把它添加到我的列表中吗?(见更新的问题)我在回答中提到的链接解决了这个问题。简而言之,STL库不会从STL.h文件中生成模板方法的不一致副本,调试器也无法从SDK中实现这些方法。因此没有“push_back”方法可调用。
(lldb) expr points.push_back($x)
error: Couldn't lookup symbols:
__ZNSt3__16vectorI5PointNS_9allocatorIS1_EEE9push_backERKS1_