当从已部署的应用程序获取堆栈跟踪作为错误报告时,获取实际变量值以在抛出异常之前重建系统状态会很有帮助。
在 Java 中这样的事情是否可行?如何做到这一点?
干杯,马克斯
我知道这是一个非常基本的问题,但我真的很困惑.事实上,我绝对是gcc语法的新手.我希望在不使用扩展内联汇编的情况下拥有局部变量(事实上堆栈地址带有标签); 类似于intel语法中的代码:
DATA1 DB 100
MOV AL,DATA1
这是我猜可能在gcc中替代的代码:
- (int)someFunction:(int)x {
Run Code Online (Sandbox Code Playgroud)DATA1 DB 100 MOV AL, DATA1
但是这段代码导致了这个错误:
找不到架构x86_64的符号
我可以在x86中使用全局变量,但x64或x86_x64中的结果相同.
设置:LLVM 4.1; Xcode中使用的Cocoa 4
什么是正确的语法?
当声明一个仅使用一个函数的常量时,该变量是否应该在本地声明,因为它仅由该函数使用,或全局声明,因为它永远不会改变?
IE更好:
CONSTANT = (1, 3, 5, 8)
##SOME OTHER CODE HERE
def function1(arg):
if arg in CONSTANT:
do something
Run Code Online (Sandbox Code Playgroud)
要么:
def function1(arg):
CONSTANT = (1, 3, 5, 8)
if arg in CONSTANT:
do something
Run Code Online (Sandbox Code Playgroud)
我知道这两者之间并没有太大区别,但我只是想知道这两种做法中哪一种是首选的,因为我刚开始并希望养成良好的习惯.
python variables coding-style global-variables local-variables
想象一下这个C#代码在某种方法中:
SomeClass.SomeGlobalStaticDictionary = new Dictionary<int, string>()
{
{0, "value"},
};
Run Code Online (Sandbox Code Playgroud)
假设没有人使用任何显式内存屏障或锁定来访问字典.
如果没有进行优化,则全局字典应为null(初始值)或具有一个条目的正确构造的字典.
问题是:可以重新排序Add调用和分配给SomeGlobalStaticDictionary的效果,以便其他一些线程看到一个空的非null SomeGlobalStaticDictionary(或任何其他无效的部分构造的字典?)
如果SomeGlobalStaticDictionary是易变的,答案会改变吗?
在阅读http://msdn.microsoft.com/en-us/magazine/jj863136.aspx(以及它的第二部分)之后,我从理论上了解到,因为在源代码中分配了一个变量,其他线程可能会因为很多原因.我查看了IL代码,但问题是JIT编译器和/或CPU是否允许在分配SomGlobalStaticDictionary之前不"刷新"Add调用对其他线程的影响.
如果它们是类变量,那么有一个问题询问lazy vals 的实现.如何实现局部变量,例如
def foo[A](a: => A) = {
lazy val x: A = a
// return something that uses x
}
Run Code Online (Sandbox Code Playgroud) 我有一个类似下面的类:
class Program
{
static void Main(string[] args)
{
var outputWindow = new OutputWindow();
var threads = new List<Thread>();
Action action = () => outputWindow.Display(20);
for (int i = 0; i < 10; i++)
{
var thread = new Thread(() => action()) {Name = "Thread " + i};
threads.Add(thread);
}
foreach (var thread in threads)
{
thread.Start();
}
}
}
public class OutputWindow
{
public void Display(int x)
{
for (int i = 0; i < x; i++)
{
Console.WriteLine(Thread.CurrentThread.Name …Run Code Online (Sandbox Code Playgroud) 如果存在全局变量并且函数具有相同名称的参数,并且期望的结果是本地变量和全局变量的总和,那么在这种特定情况下我们如何引用全局函数?我知道这样做并不好.但只是为了好奇而要求.
int foo = 100;
int bar(int foo)
{
int sum=foo+foo; // sum adds local variable and a global variable
return sum;
}
int main()
{
int result = bar(12);
return 0;
}
Run Code Online (Sandbox Code Playgroud) c++ scope global-variables local-variables parameter-passing
我一直在寻找一些旨在在性能敏感的环境中运行的JavaScript代码,主要是移动环境中的游戏引擎.
在许多情况下,此代码不使用局部变量,而是更喜欢使用显式链,例如
if (this.x.y[z].i) {
this.x.y[z].a += this.x.y[z].b;
}
Run Code Online (Sandbox Code Playgroud)
其中两个this.x.y和this.x.y.z表示"复制" - ,并且其中没有中间特性的具有吸气剂,并且其中q不是在其他地方使用的局部变量-可被处理语义上等同于以下内容.
var q = this.x.y[z]
if (q.i) {
q.a += q.b;
}
Run Code Online (Sandbox Code Playgroud)
(这些名字一直模糊不清,特别是试图减轻偏见;这个问题并不是关于要采用哪种"模式" - 虽然我更喜欢后者,并打算100%使用它,因此我在问这个问题.)
现在,在我收到大量关于"为清晰度编写代码"和"不要过早优化"的评论之前,请继续阅读!
因此,给出以下断言/公理并注意到这个问题不是关于如何提高性能,而是如果使用本地缓存/"别名"变量会降低相关JavaScript实现的性能:
可以/将使用局部变量而不是 [多个]直接属性访问会导致性能下降吗?如果这种下降是"不可忽视的......"
例:
我有以下代码块:
if (!int.TryParse("123", out var parsedNumber))
{
return;
}
Console.WriteLine(parsedNumber);
Run Code Online (Sandbox Code Playgroud)
控制台中的输出为:123
题:
生产线Console.WriteLine(parsedNumber);知道的可能性如何parsedNumber?
根据我的理解,parsedNumber应该仅在中提供if-block,不是吗?
如果我尝试这样做:
foreach (var data in dataList)
{
data += "something";
}
Console.WriteLine(data);
Run Code Online (Sandbox Code Playgroud)
Console.WriteLine(data);找不到data。
我认为解决方案是out参数,但是我不确定。有人可以解释吗?
在下面,input_1更改:
def method_1(a)
a << "new value"
end
input_1 = []
method_1(input_1)
input_1 #=> ["new value"]
Run Code Online (Sandbox Code Playgroud)
在下面,input_2不会改变:
def method_2(a)
a = ["new value"]
end
input_2 = []
method_2(input_2)
input_2 #=> []
Run Code Online (Sandbox Code Playgroud)
为什么input_1改变input_2而不改变?
local-variables ×10
c# ×3
scope ×3
c++ ×1
coding-style ×1
debugging ×1
gcc ×1
java ×1
javascript ×1
performance ×1
properties ×1
python ×1
ruby ×1
scala ×1
scala-2.10 ×1
stack-trace ×1
variables ×1