在我的场景中,我想在单独的AppDomain中执行一个方法.我可以采取多少种不同的方法来实现这一目标?
特别是,我有以下问题:
AFAIK,有两种类型的全局变量,初始化和非初始化.它们是如何存储的?它们都存储在可执行文件中吗?我可以想到初始化的全局变量的初始值存储在可执行文件中.但是对于未初始化的人需要存储什么?
我目前的理解是这样的:
可执行文件被组织为多个部分,例如.text,.data和.bss.代码存储在.text部分中,初始化的全局或静态数据存储在.data部分中,未初始化的全局或静态数据存储在.bss部分中.
感谢您抽出宝贵时间查看我的问题.
我在这里找到一个很好的参考:
汇编语言源中的段 - 使用.text,.data和.bss指令构建文本和数据段
@迈克尔
我在汇编代码中定义了一个100字节的未初始化数据区域,这个100字节没有存储在我的可执行文件中,因为它未初始化.
谁将在RAM中分配100字节的未初始化内存空间?该程序加载器?
假设我得到以下代码:
int global[100];
void main(void)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
全局[100]未初始化.如何在我的可执行文件中重新编码全局[100]?谁会在什么时候分配它?如果它被初始化怎么办?
我想使用MiniDumpWriteDump()API从另一个进程A.我这样做是因为转储崩溃的进程B MSDN这样说:
如果可能的话,应该从单独的进程调用MiniDumpWriteDump,而不是从被转储的目标进程中调用.
MiniDumpWriteDump()定义如下:
BOOL WINAPI MiniDumpWriteDump(
__in HANDLE hProcess,
__in DWORD ProcessId,
__in HANDLE hFile,
__in MINIDUMP_TYPE DumpType,
__in PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
__in PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
__in PMINIDUMP_CALLBACK_INFORMATION CallbackParam
);
Run Code Online (Sandbox Code Playgroud)
特别是,ExceptionParam的类型为PMINIDUMP_EXCEPTION_INFORMATION,其定义如下:
typedef struct _MINIDUMP_EXCEPTION_INFORMATION {
DWORD ThreadId;
PEXCEPTION_POINTERS ExceptionPointers;
BOOL ClientPointers;
} MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;
Run Code Online (Sandbox Code Playgroud)
现在我想知道如何准备以下2个参数:
ThreadId 抛出异常的线程的标识符.
ExceptionPointers 一个指向EXCEPTION_POINTERS结构指明该异常的计算机独立描述,并在异常时的处理器的上下文.
在进程A中运行时,如何在进程B中获取错误的线程id和异常指针?
谢谢.
进程ID是唯一标识进程的编号.进程句柄也是唯一标识进程内核对象的数字.
为什么我们都需要它们,因为它们中的任何一个都可以识别过程.
我认为答案可能在于进程和进程内核对象之间的映射关系.是否可以将多个进程内核对象映射到单个进程?每个进程内核对象都有自己的进程句柄.这样每个进程内核对象都可以表示不同的访问模式或类似的东西.
当我使用MiniDumpWriteDump()函数时,这个问题出现了,它被声明为:
BOOL WINAPI MiniDumpWriteDump(
__in HANDLE hProcess,
__in DWORD ProcessId,
__in HANDLE hFile,
__in MINIDUMP_TYPE DumpType,
__in PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
__in PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
__in PMINIDUMP_CALLBACK_INFORMATION CallbackParam
);
Run Code Online (Sandbox Code Playgroud)
所以它的参数包括进程ID和进程句柄.我只是不知道为什么有必要让他们两个.
非常感谢您的见解.
我读了以下声明:
SQL Server不会立即将数据写入磁盘.它保存在缓冲区缓存中,直到此缓存已满或直到SQL Server发出检查点,然后写出数据.如果在缓存仍在填满时发生电源故障,则该数据将丢失.但是,一旦电源恢复,SQL Server将从其上一个检查点状态开始,并且将在事务日志中执行作为成功事务记录的最后一个检查点之后的任何更新.
并出现了几个问题:
如果在 SQL Server发出检查点之后和缓冲区高速缓存被执行写入磁盘之前发生电源故障怎么办?缓冲区缓存中的内容是否永久丢失?
事务日志也存储为磁盘文件,与实际数据库文件没有区别.那么我们怎样才能保证日志文件的完整性呢?
那么,真的没有真正的交易存在吗?这只是概率问题.
我安装了SSRS 2012并尝试访问 http://mybox.org/Reports,但收到错误消息:
用户'mybox\xxx'没有所需的权限.验证是否已授予足够的权限并已解决Windows用户帐户控制(UAC)限制
所以我试着检查IIS设置.但令人惊讶的是,在我的IIS 8管理控制台中,没有Reports网站或虚拟文件夹.那么,报告在哪里托管?以及如何解决此权限错误?
下面是一个ChannelHandler
echo服务器.
Netty框架将调用channelReadComplete()
方法来通知处理程序最后一次调用channelRead()
是当前批处理中的最后一条消息.
我的问题是,由于数据是通过中继线传输的,Netty怎么知道什么时候a batch of message
完成?
我在下面的书中读到了<Core Java vol.1>:
每个Java应用程序都以在主线程中运行的main方法开始.在Swing程序中,主线程是短暂的.它在事件调度线程中调度用户界面的构造,然后退出... 其他线程(例如将事件发布到事件队列中的线程)在后台运行,但这些线程对于应用程序程序员是不可见的.
它让我觉得JVM使用一组标准线程来容纳每个Java程序.我认为它们包括:
我想这些线程就像JVM授予每个Java应用程序的堆空间,堆栈等其他资源一样.客户应该在不同的线程中正确地完成不同的工作.比如只在事件派发线程中做与Swing相关的事情.
我对此是否正确?我在哪里可以找到一些权威参考?JVM规范似乎没有这个.
如果我从不使用事件调度线程,例如在控制台应用程序中,我可以禁用它来节省一些CPU周期吗?
下面的链接解释了有关Swing框架如何使用线程的详细信息.
Swing中的并发性 http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html
是否可以使用external build system
for VC++ 2013?我希望Visual Studio不做任何事情,只需通过调用我的构建工具来构建.
我在考虑这样的事情:
通过右键单击解决方案并选择构建来调用解决方案级别的构建批处理.
有一些演练教程吗?我搜索了很多但没有运气.
在简要介绍了这个MSBuild
过程后,我尝试了如下.
首先,我编辑*.vcxproj
项目文件.我改变DefaultTargets
从Build
到MyTarget
.
<Project DefaultTargets="MyTarget" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
Run Code Online (Sandbox Code Playgroud)
然后我添加一个名为的新目标MyTarget
:
<Target Name="MyTarget">
<Message Text="Hello, Bitch!" />
</Target>
Run Code Online (Sandbox Code Playgroud)
我希望这可以绕过VS2013内置的构建过程,只执行我自己的批处理.
它在命令提示符下运行良好:
但是在Visual Studio中,当我右键单击项目并选择build
命令时,它会给我带来很多链接错误.
如何避免这些链接错误?由于我的批处理可以处理所有构建过程,因此我不需要Visual Studio为我做链接.
似乎这些链接错误显示出来,因为我包含*.c
带有ClCompile
标记的文件如下所示.
<ItemGroup>
<ClCompile Include="z:\MyProject1\source1.c" />
<ItemGroup>
Run Code Online (Sandbox Code Playgroud)
由于我不希望VS2013调用编译器,我将其更改为<ClInclude>
标记,链接错误消失,但符号解析不起作用......似乎我不应该更改标记.
这是另一种无需链接编译的方法.
Visual Studio C++是否可以在没有链接的情况下编译对象
似乎它没有符号解析问题.但我仍然无法通过点击调用外部批次build/rebuild/clean
.
我对 maven 越来越习惯了。但是还是有些问题。
我有多个<repository>
在我的pom.xml
。
下载工件时,Maven 将如何处理这些存储库?会按申报顺序搜索吗?
除了明确声明的之外,maven 还会检查默认的central
repohttp://repo.maven.apache.org/maven2/
吗?
如果在 中找不到某些东西explicitly configured repo
,maven 会回退到默认的中央仓库吗?
使用多个 repos 好不好?我有点担心不一致。
以下是<repositories>
我的部分pom.xml
:
<repositories>
<repository>
<id>ibiblio-central-repo</id>
<layout>default</layout>
<name>ibiblio-central-repo</name>
<releases>
<checksumPolicy>warn</checksumPolicy>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>http://maven.ibiblio.org/maven2/</url>
</repository>
<repository>
<id>oschina-central-repo</id>
<layout>default</layout>
<name>oschina-central-repo</name>
<releases>
<checksumPolicy>warn</checksumPolicy>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>http://maven.oschina.net/content/groups/public/</url>
</repository>
<repository>
<id>oschina-central-repo-3rd-party</id>
<layout>default</layout>
<name>oschina-central-repo-3rd-party</name>
<releases>
<checksumPolicy>warn</checksumPolicy>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>http://maven.oschina.net/content/repositories/thirdparty/</url>
</repository>
</repositories>
Run Code Online (Sandbox Code Playgroud) java ×2
.net ×1
assembly ×1
c ×1
c# ×1
c++ ×1
crash-dumps ×1
custom-build ×1
database ×1
debugging ×1
dump ×1
jvm ×1
maven ×1
maven-3 ×1
minidump ×1
netty ×1
networking ×1
nio ×1
process ×1
sql-server ×1
ssrs-2012 ×1
visual-c++ ×1
windows ×1