Я тестирую функцию vect_dbg(vector<int>)
, которая возвращает содержимое вектора STL в виде строки C, поэтому я могу вызвать ее с помощью gdb output vect_dbg(test)
или поместить в часы.
#include<vector>
using namespace std;
int main()
{
vector<int> test; //breakpoint; output vect_dbg(test) ends debugging.
for (int i=0;i<=10;i++) test.push_back(i);
return 0;
}
#include<sstream>
const char* vect_dbg(const vector<int> &V)
{
stringstream ss;
for (int i=0;i<V.size();i++)
ss<<"V["<<i<<"]:"<<V[i]<<' ;'; //line 16
static char sEnu[256];
ss.getline(sEnu,256);
return sEnu;
}
К сожалению, output vect_dbg(test)
прерывает отладку.
Отлаживаемая программа сигнализировалась в функции
из ГДБ. GDB восстановил контекст до того, что было до вызова.
Чтобы изменить это поведение, используйте «set unwindonsignal off».
выражение, содержащее функцию (vect_dbg (std :: vector> const &)), будет прекращено. Программа получена
сигнал SIGSEGV, ошибка сегментации. 0x004014b1 в vect_dbg
(V = @ 0x22ff34) в main.cpp: 16
Я обнаружил, что функция работает, если я сделаю test
глобальным, но я не смог найти решение для локально определенного вектора. Как я могу решить это? Большое спасибо.
РЕДАКТИРОВАТЬ: В основном решена, ответ был довольно очевидным, вектор не был инициализирован в точке останова. Теперь мне интересно, возможно ли это обнаружить в vect_dbg
.
Альтернатива, которую я нашел, - объявить статический vector<int>
.