zoukankan      html  css  js  c++  java
  • Windbg Script---从.NET应用程序检索查询/存储过程

    好的,假如正在调试一个.NET应用程序。您需要找出从访问数据库的线程执行的查询和存储过程,但是您不知道如何。好消息!这已经不是问题了!此脚本显示与SQLCommand或OracleCommand对象关联的所有查询或存储过程。此外,您可以单击它以获取更多详细信息和使用它的线程。。
    以下是截图:

     Source code for GET_SQLCOMMAND.TXT:

    $
    
    $$
    
    $$ =============================================================================
    
    $$ It shows the SQL commands from a .NET application. It gives you detailed information
    
    $$ and the threads using the query/stored procedure you selected.
    
    $$ Useful for Oracle and SQL Server.
    
    $$
    
    $$ Compatibility: Win32.
    
    $$
    
    $$ Usage: Use $$>< to run the program.
    
    $$
    
    $$ Requirements: Public symbols.
    
    $$
    
    $$ If necessary change the filename below to include your path and filename.
    
    $$ By default it uses the WinDbg path and the default file name is GET_SQLCOMMAND.TXT
    
    $$
    
    $$ Roberto Alexis Farah
    
    $$ Blog: http://blogs.msdn.com/debuggingtoolbox/
    
    $$
    
    $$ All my scripts are provided "AS IS" with no warranties, and confer no rights.
    
    $$ =============================================================================
    
    $$
    
    ad /q *
    
    r @$t0 = 0
    
    r @$t1 = 0
    
    .printf /D "<b>
    Click on the queries/stored procedures below to get more details and to find out the threads using it.
    
    </b>"
    
    .block
    
    {
    
        .block
    
        {
    
            as ${/v:ScriptName} MYSCRIPTS\GET_SQLCOMMAND.TXT
    
        }
    
        .block
    
        {
    
            as SQLCommand .block
    
            {
    
                !DumpObj poi(@$t0+0x10)
    
                !DumpObj @$t0
    
                !GCRoot @$t0
    
            }
    
        }
    
        .block
    
        {
    
            as OracleCommand .block
    
            {
    
                !DumpObj poi(@$t0+0x14)
    
                !DumpObj @$t0
    
                !GCRoot @$t0
    
            }
    
        }
    
    }
    
    .foreach(obj {!dumpheap -short -type System.Data.SqlClient.SqlCommand } )
    
    {
    
        r @$t1 = 1
    
        .printf /D "<link cmd="r @$t0 = ${obj}; ${SQLCommand} ;ad ${/v:ScriptName}; $$><${ScriptName}"><b>%mu</b></link>
    
    ", poi(${obj}+0x10)+0xc
    
    }
    
    .foreach(obj {!dumpheap -short -type System.Data.OracleClient.OracleCommand } )
    
    {
    
        r @$t1 = 1
    
        .printf /D "<link cmd="r @$t0 = ${obj}; ${OracleCommand} ;ad ${/v:ScriptName}; $$><${ScriptName}"><b>%mu</b></link>
    
    ", poi(${obj}+0x14)+0xc
    
    }
    
    .if(0 = @$t1)
    
    {
    
        .printf /D "<b>
    No SQL commands found.
    </b>"
    
    }
    
  • 相关阅读:
    输出一个行列矩阵
    猜年龄做个循环
    比较三个数字的大小
    HELLO WORLD
    Python学习(十三) —— 网络编程
    Python学习(十二) —— 面向对象
    Python学习(十一) —— 模块和包
    Python学习(十) —— 常用模块
    Python学习(八) —— 内置函数和匿名函数
    Python题目练习(二)
  • 原文地址:https://www.cnblogs.com/yilang/p/13457587.html
Copyright © 2011-2022 走看看