Нету такой возможности. Есть только возможность попросить разработчиков чтобы была такая возможность).
а в чем состоит эта костыльная идея?
а в чем состоит эта костыльная идея?
на входе в функцию запихивать в отдельный стек её сигнатуру, при выходе вытаскивать.
вуалля - стек вызовов под рукой для отладки и всяких заковырестых вещей
костыльность идеи в лишних движениях, отъеденной производительностью и очень легко сделать фатальную ошибку (достаточно один раз не вытащить сигнатуру из стека)
и вообще это задача отладчика/профилера :-)
на входе в функцию запихивать в отдельный стек её сигнатуру, при выходе вытаскивать.
вуалля - стек вызовов под рукой для отладки и всяких заковырестых вещей
костыльность идеи в лишних движениях, отъеденной производительностью и очень легко сделать фатальную ошибку (достаточно один раз не вытащить сигнатуру из стека)
и вообще это задача отладчика/профилера :-)
Спасибо!
Похоже игра не стоит свеч, ведь вход у функции один, а выходы разбросаны по всему телу ;)
У старшего брата (С++) это штука хоть есть?
очень легко сделать фатальную ошибку (достаточно один раз не вытащить сигнатуру из стека)
Это должно быть обёрнуто в RAII, так что проблемы нет.
"Должно быть" это фантастика
Закон Мёрфи, в личной интерпретации:
если могут быть грабли, значит они есть. Если они есть то на них наступают все.
Это должно быть обёрнуто в RAII, так что проблемы нет.
как обернуть? return() из метода не переопределишь, придется рядом с каждым выходом прописывать исключение из стека
как обернуть? return() из метода не переопределишь, придется рядом с каждым выходом прописывать исключение из стека
Ну вот в упрощённом виде:
string __stack_trace[1000]; int __stack_trace_i = 0; string GetStackTraceString() { string str; for (int i=0; i<__stack_trace_i; i++) str += (i>0 ? "\n" : "") + __stack_trace[i]; return str; } struct TFuncTrace { TFuncTrace(string name) { __stack_trace[__stack_trace_i++]= name; } ~TFuncTrace() { __stack_trace_i--; }; }; #define TRACE(dummy) TFuncTrace funcTrace(__FUNCSIG__); void MyFunc() { TRACE(); //... }
Дальше уже сам добавляешь по вкусу.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем здравствуйте!
Подскажите, пожалуйста, каким образом можно вывести программно стек вызовов? __FUNCSIG__ дает некоторое представление где находится код, но этого мало )