У меня есть приложение C ++, разработанное с VisualStudio 2015 (обновление 2).
Профилирование с помощью AMD Code XL показывает, что программа тратит почти 20% своего времени на функции RtlUpcaseUnicodeToMultiByteN
из модуля ntdll.dll
, По-видимому, он преобразует строки Unicode в верхний регистр.
Поскольку бессмысленно тратить на это столько времени, мне нужно знать, кто вызывает функцию.
Оказывается, это не легко.
То, что я хотел бы сделать, это установить точку останова, а затем увидеть стек вызовов. Тем не менее, я не могу установить его обычным способом без исходного кода.
Я попробовал Windbg, но трассировка стека была практически бесполезна.
Тогда я нашел там является способ установить «точку останова функции» в VisualStudio; но программа никогда не ломалась; хотя окно «модулей» показывало ntdll.dll
как статус «символы загружены».
Что еще я могу сделать?
Задача ещё не решена.
Других решений пока нет …