Точка останова, установленная sosex.mbp или sosex.mbm не работает

Я использую VS.NET 2010. Я скомпилировал очень простое приложение.NET 4.0.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TestWindbg
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.ReadLine();
            Func1();
        }

        static void Func1()
        {
            int i = 0;
            int j = i + 2;
            Console.WriteLine(j);
        }
    }
}

Я открываю скомпилированный исполняемый файл windbg 6.12.0002.633. Набирается в следующих командах для загрузки sosex

.loadby sosex clr

Затем введите следующую команду, чтобы установить точки останова

!mbm TestWindbg.Program.Func1
!mbp Program.cs 16

и затем запустите программу. Ни одна из точек останова не попала.

Любая идея?

* РЕДАКТИРОВАТЬ *

Здесь я вставляю больше деталей о моей среде согласно запросу Марка

0:004> !mbl
1 eu: disable *!TESTWINDBG.PROGRAM.FUNC1 ILOffset=0: pass=1 oneshot=false thread=ANY
2 eu: disable Program.cs, line 16: pass=1 oneshot=false thread=ANY
0:004> .chain
Extension DLL search Path:
    C:\Program Files\Debugging Tools for Windows (x64)\WINXP;C:\Program Files\Debugging Tools for Windows (x64)\winext;C:\Program Files\Debugging Tools for Windows (x64)\winext\arcade;C:\Program Files\Debugging Tools for Windows (x64)\pri;C:\Program Files\Debugging Tools for Windows (x64);C:\Program Files\Debugging Tools for Windows (x64)\winext\arcade;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Common Files\Roxio Shared\DLLShared\;C:\Program Files (x86)\Common Files\Roxio Shared\10.0\DLLShared\;C:\Program Files (x86)\Shoreline Communications\ShoreWare Client\;C:\Program Files (x86)\Perforce;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;c:\Program Files (x86)\Microsoft SQL Server\90\Tools\binn\
Extension DLL chain:
    C:\Windows\Microsoft.NET\Framework64\v4.0.30319\sosex: image 4.5.0.0, API 1.0.0, built Mon May 21 11:39:36 2012
        [path: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\sosex.dll]
    dbghelp: image 6.11.0001.404, API 6.1.6, built Wed Feb 25 18:10:27 2009
        [path: C:\Program Files\Debugging Tools for Windows (x64)\dbghelp.dll]
    ext: image 6.11.0001.404, API 1.0.0, built Wed Feb 25 18:10:26 2009
        [path: C:\Program Files\Debugging Tools for Windows (x64)\winext\ext.dll]
    exts: image 6.11.0001.404, API 1.0.0, built Wed Feb 25 18:10:17 2009
        [path: C:\Program Files\Debugging Tools for Windows (x64)\WINXP\exts.dll]
    uext: image 6.11.0001.404, API 1.0.0, built Wed Feb 25 18:10:20 2009
        [path: C:\Program Files\Debugging Tools for Windows (x64)\winext\uext.dll]
    ntsdexts: image 6.1.7015.0, API 1.0.0, built Wed Feb 25 18:09:22 2009
        [path: C:\Program Files\Debugging Tools for Windows (x64)\WINXP\ntsdexts.dll]
0:004> sx
  ct - Create thread - ignore
  et - Exit thread - ignore
 cpr - Create process - ignore
 epr - Exit process - break
  ld - Load module - output
  ud - Unload module - ignore
 ser - System error - ignore
 ibp - Initial breakpoint - break
 iml - Initial module load - ignore
 out - Debuggee output - output

  av - Access violation - break - not handled
asrt - Assertion failure - break - not handled
 aph - Application hang - break - not handled
 bpe - Break instruction exception - break
bpec - Break instruction exception continue - handled
  eh - C++ EH exception - second-chance break - not handled
 clr - CLR exception - second-chance break - not handled
clrn - CLR notification exception - second-chance break - handled
 cce - Control-Break exception - break
  cc - Control-Break exception continue - handled
 cce - Control-C exception - break
  cc - Control-C exception continue - handled
  dm - Data misaligned - break - not handled
dbce - Debugger command exception - ignore - handled
  gp - Guard page violation - break - not handled
  ii - Illegal instruction - second-chance break - not handled
  ip - In-page I/O error - break - not handled
  dz - Integer divide-by-zero - break - not handled
 iov - Integer overflow - break - not handled
  ch - Invalid handle - break
  hc - Invalid handle continue - not handled
 lsq - Invalid lock sequence - break - not handled
 isc - Invalid system call - break - not handled
  3c - Port disconnected - second-chance break - not handled
 svh - Service hang - break - not handled
 sse - Single step exception - break
ssec - Single step exception continue - handled
 sbo - Stack buffer overflow - break - not handled
 sov - Stack overflow - break - not handled
  vs - Verifier stop - break - not handled
vcpp - Visual C++ exception - ignore - handled
 wkd - Wake debugger - break - not handled
 wob - WOW64 breakpoint - break - handled
 wos - WOW64 single step exception - break - handled

   * - Other exception - second-chance break - not handled

* РЕДАКТИРОВАТЬ 17/17/2012 *

Спасибо Колинсмит, я думаю, что вы получили самый близкий ответ. Я скомпилировал свою программу как 32-битную программу. Переключитесь на использование 32-битного Windbg и 32-битного sosex. Выполните те же шаги, чтобы установить точки останова. Теперь, если я сделаю !mbl, Список точек останова отображается по-разному.

0 e : disable *!TESTWINDBG.PROGRAM.FUNC1 ILOffset=0: pass=1 oneshot=false thread=ANY
    TestWindbg!TestWindbg.Program.Func1() (PENDING JIT)

Раньше я не видел линии (PENDING JIT), Продолжите программу, и Windbg успешно остановится на точке останова.

Я понятия не имею, почему 64-битная программа не работает. Я дважды проверил мой 64-битный sosex.dll и мой 64-битный путь к символам программы. Все выглядит правильно. Возможно, это ошибка в sosex.dll?

Я использую.NET 4.0 и мой windbg работает в Windows 2008 R2 64-bit.

2 ответа

Решение

Вот несколько предложений, которые нужно проверить:

Подождите, пока модули загрузятся, прежде чем устанавливать точки останова

Вы можете попытаться дождаться окончания загрузки / инициализации JITter/ модуля / инициализации модуля, прежде чем устанавливать точку останова.

Использование:

  • sxe ld:mscorlib (перерыв после загрузки во время выполнения)... или
  • sxe ld:clrjit (перерыв после загрузки JITter)... или
  • sxe ld:MyModuleAssemblyName (перерыв после загрузки вашего конкретного модуля)

Это приведет к разрыву в отладчике после того, как они произошли.... затем вы можете сделать !mbm, так далее.

Проверьте, правильно ли загружены приватные символы ваших программ (из.pdb)

Использование:

  • lml (показать загруженный и не удалось загрузить символы)
  • lme (показать не удалось загрузить символы).

Вы могли бы альтернативно использовать !sym noisy для подробного отслеживания активности загрузки символов, например, помогает обнаружить, когда вы испортили.pdbs и т. д.

Для полезной ссылки на некоторые коды ошибок, связанные с PDB:

Для общего обсуждения проверки правильности загрузки символов см.:

Используйте 32-битную или 64-битную WinDBG

Кроме того, не могли бы вы попробовать запустить вашу программу под 32-битным отладчиком вместо 64-битного (и, конечно, использовать 32-битный плагин SOSEX... и скомпилировать как x86)... и посмотреть, получите ли вы тот же результат или нет.

Используйте последнюю версию SOSEX

В Steves Techspot он говорит, что нарушил совместимость в XP (которую вы, похоже, используете)... возможно, в этом проблема. (от 8 июня 2012 г.)

В качестве альтернативы, если у вас есть контроль над исходным кодом, вы можете попробовать добавить оператор DebugBreak в свой код C#. Windbg сломается после того, как он будет скомпилирован в двоичный файл

Хорошая ссылка на DebugBreak в C# Как я могу использовать DebugBreak () в C#?

Другие вопросы по тегам