2015-03-31 2 views
2

Есть ли способ перехватить вызовы для сна и функции типа сна в C++? Я хотел бы иметь возможность заменить реализацию без-op или в альтернативе, умножить время сна. Я полагаю, что это помогло бы определить правильность одновременных программ, а также выявить источник взлома в тестах.Перехват вызовов сна в C++

Я работаю на гигантской базе кода, поэтому использование функции обертки будет менее удовлетворительным. Может быть, есть способ использовать ptrace или те же методы, что программы, такие как valgrind, используют для перехвата malloc?

+0

(i) Можете ли вы квалифицировать «сон»? (ii) Когда это нужно сделать (что не так, например, «sed») и почему? – edmz

+0

Обычно такие _mocks_ такие вещи .... –

+0

@black - Проблема в том, что в этой кодовой базе тысячи разработчиков, и я предпочел бы сделать их прозрачными для них. Я только на самом деле хочу сделать это для нескольких особых случаев, не стоит менять то, как многие люди работают, чтобы это произошло. – Mark

ответ

6

Для пользователей gcc существует простой способ изменить некоторые вызовы в библиотеки и связать их с собственными функциями без изменения самого кода.

, если у вас есть фрагмент кода, как:

... some stuff ... 
AnyLibFunc(); 
... some stuff ... 

вы можете посоветовать компоновщик использовать обернутый метод со следующей строкой:

gcc program.c -Wl,-wrap,AnyLibFunc -o program 

И вы должны добавить реализацию обернутого func:

void __wrap_AnyLibFunc() 
{ 
    __real_AnyLibFunc(); // call the real function 
} 

В надежде, что вы работаете над средой gcc!

Смежные вопросы