Поиск всех путей выполнения кодовой базы, чтобы увидеть, где вызывается Int.TryParse - PullRequest
2 голосов
/ 15 июля 2010

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

Клиент был изменен для создания URL-адресов со строками и целочисленными значениями для параметров GET.

Может кто-нибудь предложить метод для просмотра всех путей выполнения кодовой базы и выяснения, являются ли эти строковые параметрыкогда-нибудь разбираются в int?Будет ли это подходящим приложением для размышления?Хотя я знаю, что, вероятно, для этого не существует пуленепробиваемого способа, решения, охватывающие большинство случаев, были бы замечательными.

Я программирую на VB.NET/C# и .NET4

Ответы [ 2 ]

4 голосов
/ 15 июля 2010

Могут быть и другие способы сделать это, но NDepend может решить эту проблему, и у вас есть пробная версия, чтобы помочь вам.Он обладает очень мощным языком запросов кода , который можно использовать для выполнения sql-подобных запросов к скомпилированному коду.Из моего ограниченного опыта, это звучит очень подходящим для вашей проблемы, так как вы можете запросить пути выполнения кода и получить графическое представление.

Вы можете начать с:

SELECT METHODS WHERE 
DepthOfIsUsing "System.Int32.TryParse(String,Int32&)" >= 0 
ORDER BY DepthOfIsUsing

Выполнение этого запросапротив ваших сборок вернут все методы, которые прямо и (в вашем случае, что более важно) косвенно используют «TryParse».По сути, это даст вам информацию о тех методах, которые непосредственно используют «TryParse», и методах, которые вызывают эти методы, и методах, которые вызывают эти методы и т. Д.- нажмите на заголовок результатов «n методов соответствует» и выберите в контекстном меню «Экспорт n методов, соответствующих графику».Это даст вам графическое представление всех деревьев вызовов, оканчивающихся на «TryParse».

Так для следующего кода:

using System;

namespace Scratch
{
    public class Program
    {
        private static void Main()
        {
            new Test2().DoSomething2("hello");
            new Test4().DoSomething4("world");
        }
    }

    public class Test2
    {
        public void DoSomething2(string s)
        {
            new Test3().DoSomething3(s);
        }
    }

    public class Test3
    {
        public void DoSomething3(string s)
        {
            int i;
            Console.WriteLine(int.TryParse(s, out i));
        }
    }

    public class Test4
    {
        public void DoSomething4(string s)
        {
            int i;
            Console.WriteLine(int.TryParse(s, out i));
        }
    }
}

Результаты запроса:

http://gojisoft.com/_blog/wp-content/uploads/2010/07/CQLTryParseQueryResults.png

И сгенерированный график:

http://gojisoft.com/_blog/wp-content/uploads/2010/07/DependencyGraphSnapshot.png

1 голос
/ 15 июля 2010

Если вы можете выполнить свое приложение с помощью тестового запроса GET в Поток времени выполнения , он может найти все выполненные методы Int.TryParse. Кроме того, если вы предоставляете довольно уникальную строку для запроса, вы можете найти все варианты использования этой строки в качестве параметра или возвращаемого значения.

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