Как я могу просмотреть локальные переменные на стопке оценки при отладке приложения CLR.NET?

Ну, предложения от работы Франческо. Но я все еще смущен поведением здесь. Мы знаем, что использование в кавычках групповых символов без кавычек обычно приводит к ошибке. То есть:

find . -name *.txt -print

find: пути должны предшествовать выражению: HowTo-Word-Split.txt' find: possible unquoted pattern after predicate -name '?

Однако, подстановочный знак в одинарных кавычках (или экранирование это, если это только 1 символ) будет работать так:

find . -name \*.txt -print

, который дает этот вывод (на две отдельные строки)

> ./HowTo-Word-Split.txt    
> ./bash-parms.txt    

Так что в версии bash -c то, что я Я думал, что это:

bash -c 'find . [113] $1 -print' "-name" "*.txt"

приведет к тому, что * .txt будет расширен даже перед передачей в строку cmd, а использование одинарных кавычек приведет к попытке выполнения (после подстановки arg и -c вступает в силу)

find . -name *.txt -print

, который, как я только что продемонстрировал, не работает.

Однако, похоже, существует некоторая магия, связанная с ключом -c, как показано настройкой -x в приглашении bash, например:

$ set -x
$ bash -c ' find . [115] "$1" -print' "-name" "*.txt"

+ bash -c ' find . [115] "$1" -print' -name '*.txt'
./HowTo-Word-Split.txt
./bash-parms.txt

Обратите внимание, что хотя я использовал двойные кавычки в строка -c, bash фактически выполняла поиск с одинарными кавычками, заключенными в аргумент, тем самым заставляя поиск работать.

Проблема решена. :)

6
задан Mike Dinescu 6 February 2009 в 22:34
поделиться

2 ответа

Необходимо определить и выбрать правильный поток. Идентификатор текущего потока отображен в подсказке WinDbg.

!threads отобразит все управляемые потоки в Вашем приложении. После того, как определенный можно переключить использование потоков ~Xs где X идентификатор WinDbg для потока.

!clrstack покажет Вам отслеживание стека. Если Вы хотите использование местных жителей и/или параметров -l / -p (или -a для обоих).

Можно пройти все потоки и перечислить их стек вызовов с ~*e!clrstack.

Если локальный / параметры не дает Вам, в чем Вы нуждаетесь, использовать !dso к экранным объектам, продвинутым на стек.

6
ответ дан 16 December 2019 в 21:47
поделиться

Ничего себе, это трудно без фактического дампа для ввода по абсолютному адресу через.:-)

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

Вопросы:

  1. Вы уверены, что ловите первое исключение и не только последнее, которое было не обработано и разъединено процесс?

  2. Можно ли смотреть на собственный стек вызовов для потока, который выдал исключение.
    Примечание: должен быть вызов к RaiseException () или нарушение прав доступа.

  3. Остерегайтесь Асинхронных исключений, которые абсолютно не имеют никакого отношения к Вашему коду и могут войти и вытолкать Вас в блок выгоды... или хуже (Поток. AbortException/System. OutofMemoryException и... StackOverflowException :-)

Для закапывания далее Вас работает! dumpstack на дающем сбой потоке.. Вывод не точен однако, он действительно делает удивительное задание обхода стека вызовов потоков, и можно стать удачливыми и видеть символ, который ссылается на исключение с .cxr и .exr в сообщении. Если Вы делаете, то можно выполнить .cxr - cxr-адресный и видеть то, что первое исключение было в цепочке исключения.

Точка: Хотя я могу быть стороной, ступающей вопрос, если исключение вызвало WER, это не было обработано и удалило процесс, можно хотеть Зарегистрировать стопку начального вызова или добавить предыдущее исключение как внутреннее исключение, таким образом, можно определить первопричину.

Спасибо, Aaron

2
ответ дан 16 December 2019 в 21:47
поделиться
Другие вопросы по тегам:

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