Отображение разыменованных итераторов STL в gdb

Сначала нужно определить promise.

let checkfile = new Promise(function(resolve, reject) {
     try {
        if (!fs.existsSync(path)) {
             var file = fs.createWriteStream("ring.wav");

             var request = http.get("http://mp3.com/ring.wav", 
                   function(response) {
                        response.pipe(file);
                        resolve("downloaded");
                 });
        }

   } catch(err) {
        console.error(err)
   }
  });

Теперь вы можете использовать

checkfile.then()....
12
задан kchoose2 26 November 2008 в 22:03
поделиться

4 ответа

Вот то, как я делаю это:

This GDB was configured as "i686-pc-linux-gnu"...
(gdb) list
1       #include <iostream>
2       #include <map>
3
4       int main()
5       {
6           std::map<int, int> a;
7           a[10] = 9;
8           std::map<int, int>::iterator it = a.begin();
9           ++it;
10      }
(gdb) b test.cpp:9
Breakpoint 1 at 0x8048942: file test.cpp, line 9.
(gdb) r
Starting program: /home/js/cpp/a.out

Breakpoint 1, main () at test.cpp:9
9           ++it;
(gdb) set print pretty on
(gdb) p it
$1 = {
  _M_node = 0x94fa008
}
(gdb) p *it
$2 = (class std::pair<const int, int> &) @0x94fa018: {
  first = 10,
  second = 9
}
(gdb)
18
ответ дан 2 December 2019 в 05:42
поделиться

p будет итератор к std::pair<const int, double>, таким образом, то, что Вы на самом деле хотите, p->first. Я не думаю дескрипторы GDB перегруженные операторы хорошо, тем не менее, таким образом, Вы, вероятно, хотите p.{некоторый участник, который представляет pair объект}.first. Существует документация Doxygen для libstdc ++, таким образом, можно выяснить, какого участника Вы хотите, в этом случае это надеется быть ((_Rb_tree_node<pair<const int, double> >*)(p._M_node))-> _M_value_field.first. Поскольку это является довольно подробным, я проверил бы, чтобы видеть, работает ли перегрузка оператора сначала (и не, я не думаю, что существует что-либо более простое; извините). Вы могли также попытаться явно назвать операторы, но я не думаю, что gcc может сделать это любой (например. it.operator*().first).

Править: ожидайте, сообщение litb, кажется, показывает, что gcc действительно поддерживает перегрузки оператора на *. Странный, я всегда находил, что это не работало!

1
ответ дан 2 December 2019 в 05:42
поделиться

Вы можете попробовать Archer , ветку разработки GDB, в первую очередь предназначенную для улучшения опыта отладки C ++. Нажмите здесь , чтобы увидеть демонстрацию симпатичного принтера для C ++. Этот новый проект также позволяет управлять GDB скриптом Python. Основной разработчик, Том Тромей , написал немало блогов об этом увлеченном проекте.

2
ответ дан 2 December 2019 в 05:42
поделиться

Вы можете использовать P (* IT) -> Второй

4
ответ дан 2 December 2019 в 05:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: