Как я могу перейти в функцию, содержащуюся внутри std :: function в GDB, пропуская всю внутреннюю реализацию? - PullRequest
0 голосов
/ 21 сентября 2018

Возьмите этот код:

#include <iostream>
#include <memory>
#include <functional>

std::function<int()> getint = []
{
    return 5;
};

void foo(int i)
{
    std::cout<<i<<std::endl;
}

int main()
{
    foo(getint());
}

Я остановился на точке останова в строке 17. Я хочу перейти к функции getint.Использование step в gdb по умолчанию приводит меня к куче внутренней хрени std::function, которая меня не интересует. Если я продолжу наступать, я в конечном итоге доберусь до лямбды, но придется делать это для каждого std::function звонок крайне раздражает.

Я пытался использовать команду skip:

skip -rfu ^std::.*

, но это заставляет step прыгнуть прямо в foo, полностью пропуская лямбду внутри std::function.

Можно ли настроить gdb таким образом, чтобы step в строке 17 приводил меня прямо к лямбде в строке 7?

1 Ответ

0 голосов
/ 21 сентября 2018

Хорошо, мне удалось решить эту проблему с помощью простого скрипта Python:

import gdb
import re

def stop_handler(event):
    frame_name = gdb.selected_frame().name();
    if re.search("(^std::.*)|(^boost::.*)", frame_name) != None:
        gdb.execute("step")

gdb.events.stop.connect(stop_handler)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...