2010-09-09 2 views
0

Возможно ли генерировать дерево вызовов функций во время выполнения? Я хотел бы узнать, что вызывает программа.Трассировка неуправляемых вызовов функций во время выполнения?

Это по существу то же самое, что разбивать в определенном месте, переходить через каждую функцию и записывать имена функций. У меня нет ограничений производительности.

Я использую Visual Studio, но не обязательно.

// редактировать

Чтобы уточнить, если я имел функцию A вызова функции B и функции C и функции B вызывает функцию D, я хотел бы следующий пример вывода:

(0.01s) -> Function A 
(0.02s) -> Function B 
(0.02s)  -> Function D 
(0.03s) -> Function C 

I не нужно статический график вызовов. Я хочу, что происходит в стеке для каждого вызова функции во время выполнения.

+3

Ваш вопрос немного неоднозначен: вы хотите создать граф вызовов? (За исключением вызовов через указатели функций это обычно можно сделать статически, то есть не во время выполнения). Вы хотите знать, какие функции называются наиболее или которые занимают больше всего времени? (Если это так, вам понадобится профилировщик, или вам нужно будет вручную ввести свой код). Вы хотите программно разорвать свою программу во время ее запуска и получить трассировку стека? Вы хотите, чтобы ваша программа могла запрашивать в определенном месте в процессе выполнения, чтобы узнать, что такое стек вызовов? –

+1

Doxygen может генерировать график звонящего и вызываемого абонента, но не во время выполнения. –

+0

Я бы хотел: «Вы хотите программно разорвать свою программу во время ее запуска и получить трассировку стека», следовательно, «часть времени выполнения» моего вопроса. –

ответ

1

Возможно, вы можете сделать это со всеми различными подходами, но я думаю, что ваш лучший выбор - просто использовать профилировщик.

Вычисление «кто звонит, как часто» - это именно то, для чего предназначен этот инструмент.

+0

Мне не нужен инструмент, который показывает, как часто что-то вызывается. Я хочу инструмент, который точно показывает порядок выполнения функций во время выполнения, который вызывается во время выполнения. –