我的一个朋友从Facebook下载了一些恶意软件,我很想知道它的作用而不会感染自己.我知道你不能真正反编译.exe,但我至少可以在Assembly中查看它或附加调试器吗?
编辑说它不是.NET可执行文件,没有CLI标头.
是否可以将IntelliJ IDEA调试器附加到正在运行的Java进程?如果有,怎么样?
环境:Visual Studio 2015 RTM.(我没有尝试旧版本.)
最近,我一直在调试我的一些Noda Time代码,我注意到当我有一个类型的局部变量NodaTime.Instant(structNoda Time中的一个中心类型)时,"Locals"和"Watch"窗口似乎没有调用它的ToString()覆盖.如果我ToString()在监视窗口中明确调用,我会看到相应的表示,但我只是看到:
variableName {NodaTime.Instant}
Run Code Online (Sandbox Code Playgroud)
这不是很有用.
如果我更改覆盖以返回一个常量字符串,那么该字符串将显示在调试器中,因此它显然能够接收它 - 它只是不想在"正常"状态下使用它.
我决定在一个小的演示应用程序中本地重现这个,这就是我想出的.(请注意,在这篇文章的早期版本中,DemoStruct是一个类,DemoClass根本不存在 - 我的错,但它解释了一些看起来很奇怪的评论......)
using System;
using System.Diagnostics;
using System.Threading;
public struct DemoStruct
{
public string Name { get; }
public DemoStruct(string name)
{
Name = name;
}
public override string ToString()
{
Thread.Sleep(1000); // Vary this to see different results
return $"Struct: {Name}";
}
}
public class DemoClass
{
public string …Run Code Online (Sandbox Code Playgroud) Visual Studio会记住以前调试会话中的断点,这很棒.
但是,当我正在调试时,我通过点击它来清除其中一个"旧"断点,它只是暂时删除.我的意思是下次调试时,我认为我删除的断点又回来了.
这是非常烦人的 - 有没有设置让它不这样做?
当我发现它仅适用于Linux时,我正在研究Valgrind以帮助改进我的C编码/调试 - 我没有其他需要或兴趣将我的操作系统转移到Linux所以我想知道是否有一个同样好的Windows程序.
在Visual Studio中,我们都有"baadf00d",在运行时在C++中检查调试器中的变量时看到过"CC"和"CD".
根据我的理解,"CC"仅处于DEBUG模式,以指示内存何时是new()或alloc()并且是单元化的."CD"代表删除或免费内存.我在RELEASE版本中只看过"baadf00d"(但我可能错了).
偶尔会遇到内存泄漏,缓冲区溢出等问题,这些信息会派上用场.
是否有人能够指出何时以何种模式将内存设置为可识别的字节模式以进行调试?
我经常运行一个程序:
./a.out arg1 arg2 <file
Run Code Online (Sandbox Code Playgroud)
我想用gdb调试它.
我知道set args功能,但只能从gdb提示符.
我正在研究我在Eclipse上的常规项目,它是一个J2EE应用程序,由Spring,Hibernate等构成.我正在使用Tomcat 7(没有特别的原因,我没有利用任何新功能,我只是想尝试一下).每次我调试我的应用程序时,都会发生Eclipse调试器弹出,就像它已到达断点一样,但事实并非如此,实际上它停在Java源文件上ThreadPoolExecutor.控制台上没有堆栈跟踪,它只是停止.然后,如果我点击继续,它继续,应用程序完美.这是调试器窗口中显示的内容:
Daemon Thread ["http-bio-8080"-exec-2] (Suspended (exception RuntimeException))
ThreadPoolExecutor$Worker.run() line: 912
TaskThread(Thread).run() line: 619
Run Code Online (Sandbox Code Playgroud)
我真的无法解释这个,因为我根本就没用ThreadPoolExecutor.必须是来自Tomcat,Hibernate或Spring的东西.这非常烦人,因为我总是要在调试过程中恢复.
有线索吗?
简而言之:有没有人知道gdb的GUI会使它与更新版本的Visual C++中的功能集相提并论?
详细说明:作为一个花了很多时间在Windows上编程的人,每当我在Linux中编写C++代码时,我发现的一个更大的绊脚石就是使用命令行gdb调试任何东西需要花费我几倍的时间. Visual Studio,它似乎没有通过练习变得更好.有些事情只是更容易或更快地以图形方式表达.
具体来说,我正在寻找一个GUI:
如果这样的程序不存在,那么我想听听人们对于至少满足一些要点的程序的经验.有没有人有任何建议?
编辑:
列出可能性很好,我将采取我能得到的,但如果你可以在你的回答中包含它会更有帮助:
(a)你是否真的使用过这个GUI,如果有的话,你有什么积极/消极的反馈.
(b)如果您知道,上述哪些功能不受支持
列表很容易获得,像这样的网站很棒,因为你可以了解人们的应用程序的个人经验.
当我想检测IE时,我使用此代码:
function getInternetExplorerVersion()
{
var rv = -1;
if (navigator.appName == 'Microsoft Internet Explorer')
{
var ua = navigator.userAgent;
var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
if (re.exec(ua) != null)
rv = parseFloat( RegExp.$1 );
}
return rv;
}
function checkVersion()
{
var msg = "You're not using Internet Explorer.";
var ver = getInternetExplorerVersion();
if ( ver > -1 )
{
msg = "You are using IE " + ver;
}
alert( msg );
}
Run Code Online (Sandbox Code Playgroud)
但IE11正在返回"你没有使用Internet Explorer".我该如何检测它?
debugging internet-explorer browser-detection forward-compatibility internet-explorer-11
debugging ×10
c++ ×2
gdb ×2
assembly ×1
breakpoints ×1
c ×1
c# ×1
decompiling ×1
eclipse ×1
java ×1
linux ×1
memory-leaks ×1
tomcat ×1
valgrind ×1
visual-c++ ×1
winapi ×1
windows ×1