Отладка высокого [закрытого] использования CPU

В значительной степени все используют , getopt

Здесь является примером кода для документа:

import getopt, sys

def main():
    try:
        opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
    except getopt.GetoptError:
        # print help information and exit:
        usage()
        sys.exit(2)
    output = None
    verbose = False
    for o, a in opts:
        if o == "-v":
            verbose = True
        if o in ("-h", "--help"):
            usage()
            sys.exit()
        if o in ("-o", "--output"):
            output = a

Так, одним словом, вот то, как это работает.

у Вас есть два типа опций. Те, кто получает аргументы и тех, кто точно так же, как переключатели.

sys.argv в значительной степени Ваш char** argv в C. Как в C Вы пропускаете первый элемент, который является названием Вашей программы и синтаксического анализа только аргументы: sys.argv[1:]

Getopt.getopt проанализирует его согласно правилу, которое Вы даете в аргументе.

"ho:v" здесь описывает короткие споры: -ONELETTER. : средства, что -o принимает один аргумент.

Наконец ["help", "output="] описывает длинные споры (--MORETHANONELETTER). =, после того, как произведено еще раз средства, которые производят, принимают аргументы.

результатом является список пары (опция, аргумент)

, Если опция не принимает аргумента (как [1 112] здесь) arg, часть является пустой строкой. Вы тогда обычно хотите циклично выполниться в этом списке и протестировать имя опции как в примере.

я надеюсь, что это помогло Вам.

5
задан skaffman 14 January 2011 в 23:47
поделиться

4 ответа

Хорошо, я нашел проблему Я сделал ! clrstack -p а затем! do на частях system.net, и выяснилось, что проблемный поток был System.net.Servicepoint, указывающим на наш smtp-сервер.

Погуглил и обнаружил, что это проблема http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=337557 также описано здесь http://www.vbforums.com/showthread.php?t=584384 Это проблема, связанная с тем, что точка обслуживания неправильно отправляет команду выхода и отключается. Они собираются решить эту проблему в .net 4.0

Теперь мне просто нужно закодировать обходные пути, чтобы убедиться, что точка обслуживания закрывается, и это должно работать out

Спасибо за помощь

10
ответ дан 13 December 2019 в 05:37
поделиться

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

В вставленном вами материале я вижу только трассировку стека для одного потока, можете ли вы получить стек трассировка для всех потоков? (Извините, если это не так, я привык делать это в основном в unix)

1
ответ дан 13 December 2019 в 05:37
поделиться

Используйте ProcDump , чтобы получить дамп памяти, когда ЦП загружается. Затем проверьте стеки вызовов всех потоков. Также запустите perfmon и продолжайте проверять поток, который использует большую часть процессора. Надеюсь, это поможет

1
ответ дан 13 December 2019 в 05:37
поделиться

Если вы можете присоединить отладчик, то некорректно работающие потоки обычно будут тем потоком, который возникает, когда вы «Разбейте все».

В противном случае я бы, вероятно, сделал несколько снимков местоположения этих потоков и посмотрите, есть ли какие-либо потоки, которые постоянно не находятся в режиме ожидания (например, WaitForMultipleObjectEx). Это должно дать вам представление о том, какие потоки работают неправильно и какой код они обычно выполняют.

И убедитесь, что у вас нет кода вроде:

while(1)
  ;

:)

0
ответ дан 13 December 2019 в 05:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: